Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Cakephp relaciones uno-a-muchos

Estas en el tema de Cakephp relaciones uno-a-muchos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, estoy realizando en cakephp una aplicacion pero tengo un problema con la funcion edit ya que tanto la funcion add como el index me ...
  #1 (permalink)  
Antiguo 05/08/2011, 00:44
 
Fecha de Ingreso: octubre-2010
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Cakephp relaciones uno-a-muchos

Hola, estoy realizando en cakephp una aplicacion pero tengo un problema con la funcion edit ya que tanto la funcion add como el index me funciona a la perfección pero tengo un problema a la hora de editar el contenido de una tabla. Al pulsar a "editar" que hay en el index.ctp me muestra la vista edit.ctp pero sin datos, cuando deberia mostrar los datos de ese registro. Pongo como tengo el controller y la vista edit.ctp

CONTROLLER
<?php
class MovimientosController extends AppController{
var $name = 'Movimientos';
var $helpers = array('Html', 'Form', 'Time');


function edit($id = null) {

if (!$id) {

$this->Session->setFlash('Movimiento no Válido');

$this->redirect(array('action'=>'index'), null, true);

}

if (empty($this->data)) {

$this->data = $this->Movimiento->find(array('id' => $id));

} else {

if ($this->Movimiento->save($this->data)) {

$this->Session->setFlash('Movimiento salvado');

$this->redirect(array('action'=>'index'), null, true);

}

}
$conceptos = $this->Movimiento->Concepto->find('list',array('conditions'=>array('Movimiento .concepto_id'=>'Concepto.id'),'fields'=>array('Con cepto.concepto')));
$this->set('conceptos', $conceptos);

} }
?>

VISTA EDIT.CTP

<?php echo $form->create('Movimiento');?>
<fieldset>
<legend>Edita Movimiento</legend>
<?php
echo $form->hidden('id');
echo $form->input('fecha');
echo $form->input('concepto');
echo $form->input('tipomov');
echo $form->input('notas');
echo $form->input('cantidad');
?>
</fieldset>
<?php echo $form->end('Salvar');?>
<?php echo $html->link('Listar Todas los Movimientos', array('action'=>'index')); ?>
<br />
<?php echo $html->link('Agregar Movimiento', array('action'=>'add')); ?>

La tabla movimientos tiene los siguientes campos:
id integer primary key
concepto_id integer clave secundaria
fecha date
tipomov varchar(1)
notas varchar(200)

La tabla conceptos:
id integer primary key
concepto varchar(50)

La relacion de concepto movimiento es 1->N

Alguien sabria decirme como editar los datos la tabla movimiento junto con el campo "concepto" de la tabla concepto.

Gracias de antemano
  #2 (permalink)  
Antiguo 08/08/2011, 01:56
 
Fecha de Ingreso: octubre-2010
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Cakephp relaciones uno-a-muchos

Buenos días, haces unos días puse el problema que tengo, veo que nadie me ha respondido por lo que deduzco que no es tan trivial el problema.

Lo que necesito es como hacer la funcion edit para que me coja los datos de dos tablas en un formulario.

function edit($id = null) {

if (!$id) {

$this->Session->setFlash('Movimiento no Válido');

$this->redirect(array('action'=>'index'), null, true);

}

if (empty($this->data)) {

$this->data = $this->Movimiento->Concepto->find('first',array('Movimiento.concepto_id'=>'Con cepto.id')));

} else {

if ($this->Movimiento->save($this->data)) {

$this->Session->setFlash('Movimiento salvado');

$this->redirect(array('action'=>'index'), null, true);

}

}
$this->Movimiento->Concepto->find('first', array('conditions'=> array('Concepto.id' => 'Movimiento.concepto_id')));
}


Saludos y gracias
  #3 (permalink)  
Antiguo 11/08/2011, 03:42
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 8 meses
Puntos: 845
Respuesta: Cakephp relaciones uno-a-muchos

Que tal jmsp102,

La falta de respuesta no se debe a la dificultad del problema, es que no tiene mucho movimiento el FW que estas utilizando, no soy usuario de cake pero entiendo que el problema esta en esta linea:

Código PHP:
Ver original
  1. $this->data = $this->Movimiento->Concepto->find('first',array('Movimiento.concepto_id'=>'Concepto.id')));

has comprobado que el find te devuelve los datos ?, en que momento le estas pasando el id($id) que identifica el registro ?


Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 17/08/2011, 09:27
 
Fecha de Ingreso: octubre-2010
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Cakephp relaciones uno-a-muchos

Hola masterpuppet, gracias por responder, sobre tus preguntas:

el id se lo paso en el index.ctp con la siguiente linea: Al pulsar en el enlace Editar me lleva a edit y le paso el id.

<?php echo $html->link('Editar', array('action'=>'edit', $movimiento['Movimiento']['id'])); ?>


En cuanto a tu segunda pregunta, ¿Cómo puedo comprobar que el find me devuelve los datos?.

Muchas gracias por tu colaboración.
  #5 (permalink)  
Antiguo 18/08/2011, 00:55
 
Fecha de Ingreso: octubre-2010
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Cakephp relaciones uno-a-muchos

hola, ya he coseguido que muestre los datos del modelo movimiento:

$this->data = $this->Movimiento->find('first', array('conditions'=> array('Movimiento.id' => $id)));

pero necesito mostrar en la vista edit ademas un campo del modelo concepto que se relaciona con el modelo movimiento po el campo: concepto_id

como lo hago?
  #6 (permalink)  
Antiguo 18/08/2011, 01:59
 
Fecha de Ingreso: octubre-2010
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Cakephp relaciones uno-a-muchos

Mi funcion edit es:

function edit($id = null) {



if (empty($this->data)) {
$this->data = $this->Movimiento->find('first', array('conditions'=> array('Movimiento.id' => $id)));
$this->set($data);
$conceptos = $this->Movimiento->Concepto->find('list', array('conditions'=> array('Movimiento.concepto_id' => 'Concepto.id'), array('fields'=>'Concepto.concepto')));
$this->set('conceptos', $conceptos);
}
}

La primera parte funciona, me coge los datos del modelo Movimiento en el formulario de la vista Edit. La segunda parte me falla donde intento coger el campo concepto del modelo Concepto. Esta parte es la que falla

$conceptos = $this->Movimiento->Concepto->find('list', array('conditions'=> array('Movimiento.concepto_id' => 'Concepto.id'), array('fields'=>'Concepto.concepto')));
$this->set('conceptos', $conceptos);


Alguna ayuda por favor

Etiquetas: cakephp, html, php, registro, relaciones, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.