Frage

Ich bin neu in CakePhp und habe das Apress -Buch "Beginning CakePhp vom Anfänger zum Profi" durchgearbeitet, habe aber nach dem Backkapitel ein Problem gestoßen.

(Wenn Sie meine andere aktuelle Frage gesehen haben, werden Sie wissen, dass ich dieses Kapitel überspringen musste, weil ich die Bake -Konsole auf meiner Win7 -Maschine nicht zum Laufen bringen kann.)

Das Problem ist, dass ich nicht mehr glaube, dass die Tabellenverbände ordnungsgemäß funktionieren, obwohl sie es sich daran gewöhnt haben, zu Beginn des Buches das Beispiel für die Blog -Anwendung zu starten.

Das Blog -Beispiel enthält die folgenden Tabellen:

Users
Posts

Das Benutzermodell: $ hasmany = array ('post'); Das Postmodell: $

Ich verwende derzeit das Gerüst nur, um alles zu testen, aber ein paar benutzerdefinierte Ansichten und eine benutzerdefinierte add () -Aktion für das posts_controller.

Das Problem ist, dass wenn ich die Aktion add () für das posts_controller verwende, wird das ID -Feld für den Benutzer (aus der Benutzertabelle) nicht in das Feld des user_id -Fremdschlüssels der Post -Tabelle eingesetzt. Wenn ich den Beitrag anzeige, ist der "Autor" -Teil der Ansicht leer, da die ID nicht gefunden werden kann. Wenn ich benutze debug($posts) Anschließend enthält das zurückgegebene Array keine Informationen für User_id jedes Beitrags und daher keine Informationen im "Benutzer" -Array.

Ich dachte, User_id sei die konventionelle Möglichkeit, einen Zusammenhang zwischen Tabellen für CakePhp hinzuzufügen, aber es scheint nicht zu funktionieren.

Irgendwelche Ideen, was ich tun muss?

Vielen Dank im Voraus,

Infiniti Fizz

Ps sorry an alle, wenn ich Sie mit CakePhp -Problemen überwältige.

Pps

Fast vergessen, meine add.ctp -Ansicht für Beiträge sieht wie folgt aus:

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

Und die Aktion add () in posts_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'));
}
War es hilfreich?

Lösung

Ich bin auch neu im Kuchen, aber soweit ich weiß, denke ich, dass Sie dies in add.ctp ändern sollten:

$form->input('User')

dazu

$form->input('user_id')

Der Formhelper achtet darauf, die Eingabe als Dropdown (basierend auf den Hasmany-BelongSTO-Referenzen) anzuzeigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top