Mysql
 sql >> Baza danych >  >> RDS >> Mysql

CakePHP 3 - Zapisywanie danych z asocjacjami, gdy są zależne od asocjacji

Wygląda na to, że bardziej sensowne byłoby umieszczenie pola logicznego w tabeli użytkowników, które określa, czy użytkownik jest administratorem, czy nie.

Biorąc to pod uwagę, może być konieczne zdefiniowanie relacji w swoich modelach, jeśli jeszcze jej nie ma. Technicznie rzecz biorąc, na podstawie nazw tabel i kolumn (user_id) Cake powinien upiec to za Ciebie, ale nie pamiętam, czy jest to typowe dla nazw modeli w liczbie mnogiej (Użytkownicy, Administratorzy), więc mogło się to nie wydarzyć.

Użytkownik:

public $belongsTo = [
    'Admins' => [
        'classname' => 'Admins', //are your models really plural? 
        'foreignKey' => 'user_id',
];

Administrator

public $hasOne= [
    'Users' => [
        'classname' => 'Users',
        'foreignKey' => 'user_id',
];

Następnie myślę, że musisz podać pewne informacje o administratorze, w przeciwnym razie nie będziesz mieć żadnych danych, aby zapisać powiązanie. W widoku:

echo $this->Form->input('admins.field1');
echo $this->Form->input('admins.field2');
echo $this->Form->input('admins.field3');

Pamiętaj, że te pola mogą być ukryte, jeśli nie chcesz nic wprowadzać.

Aby zapisać, utwórz nowego użytkownika z danych żądania (formularz tworzy użytkownika, ale możesz utworzyć administratora z formularzem, a następnie dodać dane wejściowe, takie jak nazwa.użytkownika i nazwisko.użytkownika). Kontroler:

$user = $this->Admins->Users->newEntity();

if($this->request->is('post')) {
    $this->Admins->Users->patchEntity($user, $this->request->data, [
        'associated' => ['Admins']
    ]);
    $this->Admins->Users->save($user);
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mówi, że nie wybrano bazy danych, nawet po użyciu mysqli_select_db()

  2. SQL JOIN jako pojedynczy wiersz z wartościami podrzędnymi jako kolumnami i możliwością ORDER BY wartości relacji podrzędnej

  3. Hibernacja mapowania relacji/przyspieszenie wstawiania partii

  4. Brak pamięci (przydzielono 50855936) (próbowano przydzielić 50331646 bajtów)

  5. „Nie można przekonwertować wartości daty/godziny MySQL na System.DateTime”, GDY nie używa się daty — C#.Net