Pregunta

Soy nuevo en CakePHP y he estado trabajando a través del libro de Aprss "Beginnephephp de novato a profesional", pero me he encontrado con un problema después del capítulo de hornear.

(Si has visto mi otra pregunta reciente, sabrás que tuve que omitir ese capítulo porque no puedo hacer que la consola Bake funcione en mi máquina Win7).

El problema es que ya no creo que las asociaciones de mesa funcionen correctamente, a pesar de que solían hacerlo cuando comencé el ejemplo de la aplicación de blog al comienzo del libro.

El ejemplo del blog tiene las siguientes tablas:

Users
Posts

El modelo de usuario: $ Hasmany = Array ('Post'); El modelo de publicación: $ pereerTSto = array ('user');

Actualmente estoy usando el andamio solo para probar todo, pero tengo algunas vistas personalizadas y una acción Add () personalizada para Posts_Controller.

El problema es que cuando uso la acción add () para Post_Controller, el campo de identificación para el usuario (desde la tabla de usuarios) no se coloca en el campo de clave extranjera user_id de la tabla de publicaciones. Por lo tanto, cuando muestro la publicación, la parte del "autor" de la vista está en blanco porque la identificación no se puede encontrar. Si uso debug($posts) Luego, la matriz devuelta no tiene ninguna información para User_ID de cada publicación y, por lo tanto, no hay información en la matriz 'Usuario'.

Pensé que User_ID era la forma convencional de agregar una asociación entre las tablas para CakePHP, pero no parece estar funcionando.

¿Alguna idea de lo que necesito hacer?

Muchas gracias de antemano,

Infiniti efervescencia

PD, lo siento, todos si te estoy abrumando con problemas de pastel de pastel.

PPS

Casi lo olvido, mi vista add.ctp para publicaciones se ve de la siguiente manera:

<div class="posts form">
 <?=$form->create('Post');?>
 <fieldset>
 <legend>Add Post</legend>
 <?
  e($form->input('name'));
  e($form->input('date'));
  e($form->input('content'));
  e($form->input('User'));
 ?>
 </fieldset>
 <?=$form->end('Submit');?>
</div>
<div class="actions">
 <ul>
  <li><?=$html->link(__('List Posts', true),array('action'=>'index'));?></li>
  <li><?=$html->link(__('List Users', true),array('controller','users', 'action'=>'index'));?></li>
  <li><?=$html->link(__('New User', true),array('controller'=>'users', 'action'=>'add'));?></li>
 </ul>
</div>

Y la acción add () en Post_Controller.php:

function add()
{
   if(!empty($this->data))
   {
    $this->Post->create();
    if($this->Post->save($this->data))
    {
     $this->Session->setFlash('The Post has been saved', true);
     $this->redirect(array('action' => 'index'));
    }
    else
    {
     $this->Session->setFlash('The Post could not be saved. Please try again.', true);
    }
   }
   $users = $this->Post->User->find('list');
   $this->set(compact('users'));
}
¿Fue útil?

Solución

También soy nuevo en el pastel, pero hasta donde sé, creo que deberías cambiar esto en add.ctp:

$form->input('User')

a esto

$form->input('user_id')

FormHelper tiene cuidado de mostrar la entrada como un menú desplegable (basado en las referencias Hasmany-Belongsto).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top