Como ver otros valores de una tabla si tengo solo el id?

83 views
Skip to first unread message

Paz Ojeda

unread,
Mar 30, 2016, 6:40:47 PM3/30/16
to CakePHP en Español
Hola necesito de su ayuda porfavor, estoy usando la version 2.5.3 de cake y estoy estancada en lo siguiente

Tengo 2 tablas relacionadas por HABTM una llamada empleados y otra faenas, el problema que tengo es que al mostrar la lista de los empleados, el campo Faena me lo muestra con la id, y lo que quiero es que me muestre el nombre de la faena



Ojala me puedan ayudar, muchas gracias!

alberto arellano

unread,
Mar 31, 2016, 12:51:17 AM3/31/16
to cakep...@googlegroups.com

Vas a tener que agregarlos manualmente.  Usa el behavior containable para traer los datos de la otra tabla y luego muestralos en tu vista.

--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cakephp-esp...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/cakephp-esp.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

omar saboya caro

unread,
Mar 31, 2016, 9:52:33 PM3/31/16
to cakep...@googlegroups.com
Quizas puedas utilizar $displayField e indicar que campo quieres mostrar de la tabla Faena.

En el modelo Faena Agrega la siguiente linea
$public $displayField = 'nombre';
--
Omar Saboya Caro
RPM #950456511

Paz Ojeda

unread,
Apr 1, 2016, 10:46:26 AM4/1/16
to CakePHP en Español
Hola, gracias por sus respuestas, con respecto a behavior containable voy a tratar de implemetarlo, y con respecto al displayfield ese ya lo tenia desde el principio en mi modelo Faena, tal como lo escribiste estimado Omar, saludos estare atenta a sus comentarios

erod

unread,
Apr 1, 2016, 2:52:55 PM4/1/16
to CakePHP en Español
Utiliza virtualfields eso te permite hacer lo que necesitas, debes declararlos en el modelo.

Paz Ojeda

unread,
Apr 4, 2016, 7:53:40 PM4/4/16
to CakePHP en Español
Hola, aun no logro solucionarlo, ya tenia en el modelo Faena lo siguiente: public $displayField='nombre';  y sigue asi :(

omar saboya caro

unread,
Apr 5, 2016, 1:43:56 PM4/5/16
to cakep...@googlegroups.com
HABTM
En tu vista deberías tener algo como:

foreach($datos as $rs){
 echo $rs['Empleado']['id']
 echo $rs['Empleado']['nombre']..... etc
  
  foreach($rs['Faena'] as $fa){
    if($rs['Empleado']['id'] == $fa['empleado_id']){
       echo $fa['campo_a_mostrar']  //faenas
    }
  }

}

no es muy optimo pero te ayudara a resolver tu problema

--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cakephp-esp...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/cakephp-esp.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Paz Ojeda

unread,
Apr 5, 2016, 2:05:13 PM4/5/16
to CakePHP en Español
Hola coloque como me dijiste pero me sale el siguiente error:
Notice (8): Undefined index: Faena [APP\View\Empleados\index.ctp, line 27] y este es el index.ctp de empleados:
<table>
<tr>
<th><?php echo $this->Paginator->sort('id')?></th>
<th><?php echo $this->Paginator->sort('Rut')?></th>
<th><?php echo $this->Paginator->sort('Nombre')?></th>
<th><?php echo $this->Paginator->sort('Role')?></th>
<th><?php echo $this->Paginator->sort('Telefono')?></th>
<th><?php echo $this->Paginator->sort('created')?></th>
<th><?php echo $this->Paginator->sort('modified')?></th>
<th><?php echo $this->Paginator->sort('Faena')?></th>
</tr>
<?php foreach($empleados as $k=>$empleado):?>
<tr>
<td><?php echo h($empleado['Empleado']['id']);?></td>
<td><?php echo h($empleado['Empleado']['rut']);?></td>
<td><?php echo h($empleado['Empleado']['nombre']);?></td>
<td><?php echo h($empleado['Empleado']['role']);?></td>
<td><?php echo h($empleado['Empleado']['tel']);?></td>
<td><?php echo h($empleado['Empleado']['created']);?></td>
<td><?php echo h($empleado['Empleado']['modified']);?></td>

<td><?php foreach($empleado['Faena'] as $fa):
if($empleado['Empleado']['id'] == $fa['empleado_id']){
echo $fa['nombre'];}?></td>

<?php endforeach;?>
</tr>
<?php endforeach;?>
</table>

Este es em modelo empleado

class Empleado extends AppModel{
public $displayField='nombre';



public $hasAndBelongsToMany= array(
'Faena'=>array(
'className'=>'Faena',
'joinTable'=>'empleados_faenas',
'foreignKey'=>'empleado_id',
'associationForeignKey'=> 'faena_id')
);

Y este el modelo Faena:
class Faena extends AppModel{
public $displayField='nombre';
public $hasAndBelongsToMany= array(
'Empleado'=>array(
'classname'=>'Empleado',
'joinTable'=>'empleados_faenas',
'foreignKey'=>'faena_id',
'associationForeignKey'=>'empleado_id')
);

Y por ultimo en el controller:
public function index(){
$this->Empleado->recursive=0;
$this->set('empleados',$this->paginate());



$faenas=$this->Empleado->Faena->find('list');
$this->set(compact('faenas'));

}

De verdad no se que puede estar fallando, ojala me puedan ayudar, gracias y saludos!

El miércoles, 30 de marzo de 2016, 19:40:47 (UTC-3), Paz Ojeda escribió:

omar saboya caro

unread,
Apr 5, 2016, 5:27:20 PM4/5/16
to cakep...@googlegroups.com
Modifica lo siguiente:
<?php foreach($empleados as $k=>$empleado):?>
<tr>
<td><?php echo h($empleado['Empleado']['id']);?></td>
<td><?php echo h($empleado['Empleado']['rut']);?></td>
<td><?php echo h($empleado['Empleado']['nombre']);?></td>
<td><?php echo h($empleado['Empleado']['role']);?></td>
<td><?php echo h($empleado['Empleado']['tel']);?></td>
<td><?php echo h($empleado['Empleado']['created']);?></td>
<td><?php echo h($empleado['Empleado']['modified']);?></td>

				<td><?php foreach($faenas as $fa):
if($fa['Faena']['id'] == $empleado['Empleado']['faena_id']){
echo $fa['Faena']['nombre'];}?></td>


<?php endforeach;?>
</tr>
<?php endforeach;?>

--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cakephp-esp...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/cakephp-esp.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Paz Ojeda

unread,
Apr 5, 2016, 5:37:34 PM4/5/16
to cakep...@googlegroups.com
Me salen los siguientes errores:
Warning (2): Illegal string offset 'Faena' [APP\View\Empleados\index.ctp, line 29]
Warning (2): Illegal string offset 'id' [APP\View\Empleados\index.ctp, line 29]


Este correo electrónico se ha enviado desde un equipo libre de virus y protegido por Avast.
www.avast.com

Has recibido este mensaje porque estás suscrito a un tema del grupo "CakePHP en Español" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/cakephp-esp/320zubUVFSg/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a cakephp-esp...@googlegroups.com.

omar saboya caro

unread,
Apr 5, 2016, 5:49:05 PM4/5/16
to cakep...@googlegroups.com
en tu controlador
cambia esta linea
$faenas=$this->Empleado->Faena->find('list');
por
$faenas=$this->Empleado->Faena->find('all');
y valida nuevamente

Paz Ojeda

unread,
Apr 5, 2016, 5:52:29 PM4/5/16
to cakep...@googlegroups.com
Funciono perfecto! Muchas gracias!

erod

unread,
Apr 6, 2016, 10:26:06 AM4/6/16
to CakePHP en Español
Revisa este video, alli esta lo que necesitas, https://www.youtube.com/watch?v=ko9LuZ7CA1c
Reply all
Reply to author
Forward
0 new messages