Domanda

Sono nuovo in CakePhp e ho lavorato attraverso il libro di Apress "Begining Cakephp dal principiante al professionista", ma ho riscontrato un problema dopo il capitolo di cottura.

(Se hai visto la mia altra domanda recente, saprai che ho dovuto saltare quel capitolo perché non riesco a far funzionare la console Bake sulla mia macchina Win7).

Il problema è che non credo che le associazioni di tabelle funzionino correttamente, anche se quando ho iniziato l'esempio dell'applicazione del blog all'inizio del libro.

L'esempio del blog ha le seguenti tabelle:

Users
Posts

Il modello utente: $ hasMany = array ('post'); Il modello post: $ BENTLESTO = Array ('Utente');

Attualmente sto usando l'impalcatura solo per testare tutto, ma ho alcune viste personalizzate e un'azione ADD () personalizzata per Post_Controller.

Il problema è che quando utilizzo l'azione ADD () per Post_Controller, il campo ID per l'utente (dalla tabella degli utenti) non viene inserito nel campo della chiave esterna utente_id della tabella dei post. Pertanto, quando visualizzo il post, la parte "autore" della vista è vuota perché l'ID non può essere trovato. Se uso debug($posts) quindi l'array restituito non ha alcuna informazione per utente di ciascun post e quindi nessuna informazione nell'array "utente".

Pensavo che User_id fosse il modo convenzionale di aggiungere un'associazione tra le tabelle per CakePHP, ma non sembra funzionare.

Qualche idea su cosa devo fare?

Grazie mille in anticipo,

Infiniti Fizz

PS Scusa a tutti se ti sto travolgendo con problemi di cakephp.

PPS

Quasi dimenticato, la mia vista add.ctp per i post sembra segue:

<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>

E l'azione aggiuntiva () in 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'));
}
È stato utile?

Soluzione

Sono anche nuovo alla torta, ma per quanto ne so, penso che dovresti cambiarlo in Add.ctp:

$form->input('User')

a questo

$form->input('user_id')

Formhelper si prende cura di visualizzare l'input come menu a discesa (basato sui riferimenti Hasmany-Belongsto).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top