Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

CakePHP 3 - Salvando dados com associações onde depende da associação


Parece que pode fazer mais sentido ter um campo booleano na tabela de usuários que define se um usuário é um administrador ou não.

Dito isto, você pode precisar definir o relacionamento em seus modelos, se ele ainda não estiver lá. Tecnicamente, com base em seus nomes de tabela e colunas (user_id), o Cake deve preparar isso para você, mas não me lembro se é convencional ter nomes de modelo no plural (Users, Admins), então isso pode não ter acontecido.

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

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

Então, acho que você precisaria especificar algumas informações sobre o administrador, ou não terá nenhum dado para salvar a associação. Na vista:
echo $this->Form->input('admins.field1');
echo $this->Form->input('admins.field2');
echo $this->Form->input('admins.field3');

Observe que esses campos podem ser ocultos se você não quiser que nada seja inserido.

Para salvar, crie um novo usuário a partir dos dados da solicitação (seu formulário cria um usuário, mas você pode criar um administrador com o formulário e adicionar entradas como user.name e user.surname). Controlador:
$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);
}