Mysql
 sql >> Base de données >  >> RDS >> Mysql

CakePHP 3 - Enregistrer des données avec des associations en fonction de l'association

Il semblerait plus logique d'avoir un champ booléen dans la table des utilisateurs qui définit si un utilisateur est un administrateur ou non.

Cela étant dit, vous devrez peut-être définir la relation dans vos modèles si elle n'y est pas déjà. Techniquement, en fonction de vos noms de table et de vos colonnes (user_id), Cake devrait intégrer cela pour vous, mais je ne me souviens pas s'il est conventionnel d'avoir plusieurs noms de modèle (utilisateurs, administrateurs), donc cela n'est peut-être pas arrivé.

Utilisateur :

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

Administrateur

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

Ensuite, je pense que vous devrez spécifier des informations sur l'administrateur, sinon vous n'aurez aucune donnée pour enregistrer l'association. Dans la vue :

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

Notez que ces champs peuvent être masqués si vous ne voulez rien saisir.

Pour enregistrer, créez un nouvel utilisateur à partir des données de la demande (votre formulaire crée un utilisateur, mais vous pouvez créer un administrateur avec le formulaire, puis ajouter des entrées telles que user.name et user.surname). Contrôleur :

$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);
}