Speichern Ich habe Funktion in der Steuerung bekommt, das wie folgt aussieht:CakePHP 3 - Daten Verein vor
//Create room
public function createRoom(){
$room = $this->Rooms->newEntity();
if($this->request->is('post')){
$room = $this->Rooms->patchEntity($room, $this->request->data);
$user_field = $this->Rooms->Users->find()->where(['id' => $this->Auth->user('id')]);
$room->users = [$user_field];
$room->current = 1;
$room->owner_id = $this->Auth->user('id');
Log::debug($room);
if($this->Rooms->save($room)){
$this->Flash->success('You have created a new room.');
return $this->redirect(['action' => 'index']);
}
else{
$this->Flash->error('Error creating new room.');
}
}
$games = $this->Rooms->Games->find('list', ['limit' => 200, 'keyField' => 'id', 'valueField' => 'name']);
$this->set(compact('room', 'games', 'users'));
$this->set('_serialize', ['room']);
}
Tabellen „Benutzer“ und „Zimmer“ ist in Zuordnungstabelle verbunden. Wenn ich einen neuen Raum hinzufüge und den Benutzer durch das Formular auswählen lasse, wer sich im Raum befindet, wird er gespeichert, aber wenn ich den ersten Benutzer über $ room-> users = [$ user_field] hinzufügen möchte, ; es wird nicht gespeichert. Ich logge $ room-Objekt in die Datei und beide Objekte sind gleich (nach dem Hinzufügen von Benutzer über das Formular und nach dem Hinzufügen von Benutzer durch den Code). Helfen Sie mir :(
Vielleicht sollte ich before() oder aftersave() in Modell?
SOLUTION ich eine Lösung mit Code.Working-Hilfe. Statt
$this->loadModel('Users');
des Hinzufügens
zum initializie() -Methode ich habe es nur in meinem createRoom() Funktion.
Schlussarbeits Code lik sieht e dies:
//Create room
public function createRoom(){
$this->loadModel('Users');
$room = $this->Rooms->newEntity();
if($this->request->is('post')){
$room = $this->Rooms->patchEntity($room, $this->request->data);
$user_field = $this->Users->get($this->Auth->user('id'));
$room->users = [$user_field];
$room->current = 1;
$room->owner_id = $this->Auth->user('id');
Log::debug($room);
if($this->Rooms->save($room)){
$this->Flash->success('You have created a new room.');
return $this->redirect(['action' => 'index']);
}
else{
$this->Flash->error('Error creating new room.');
}
}
$games = $this->Rooms->Games->find('list', ['limit' => 200, 'keyField' => 'id', 'valueField' => 'name']);
$this->set(compact('room', 'games', 'users'));
$this->set('_serialize', ['room']);
}
hey, danke für die Antwort. Wo ich Ihre Lösung in meine Steuerung gesetzt habe, habe ich folgenden Fehler bekommen: Aufruf einer Member-Funktion user() auf boolean. Was soll ich damit machen? – Barteo
Haben Sie das Auth Plugin geladen? Es kann helfen, Auth in einer Variablen und print_r() in der Ansicht zu speichern. Wie $ this-> set ('auth', $ this-> Auth); In der Ansicht: print_r ($ auth); –