sql >> Databáze >  >> RDS >> Mysql

CakePHP 3 - Ukládání dat s asociacemi, kde závisí na asociaci

Zdá se, že by mohlo dávat větší smysl mít v tabulce uživatelů booleovské pole, které definuje, zda je uživatel správcem nebo ne.

Jak již bylo řečeno, možná budete muset definovat vztah ve svých modelech, pokud tam ještě není. Technicky vzato, na základě vašich názvů tabulek a sloupců (user_id) by to měl Cake upéct za vás, ale nepamatuji si, zda je obvyklé mít názvy modelů v množném čísle (Uživatelé, Správci), takže se to možná nestalo.

Uživatel:

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

Správce

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

Pak si myslím, že budete muset zadat nějaké informace o správci, jinak nebudete mít žádná data k uložení přidružení. V zobrazení:

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

Poznámka:Tato pole mohou být skryta, pokud nechcete nic zadávat.

Chcete-li uložit, vytvořte nového uživatele z dat požadavku (váš formulář vytvoří uživatele, ale můžete s formulářem vytvořit správce a poté přidat vstupy jako user.name a user.surname). Ovladač:

$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. MySQL – Jak sledovat každý dotaz?

  2. Velké úložiště .patch_storage

  3. Java Class.forName, ovladač načítání připojení JDBC

  4. ORACLE TRIGGER INSERT DO ... (VYBRAT * ...)