sql >> Base de Datos >  >> RDS >> Mysql

CakePHP 3 - Guardar datos con asociaciones donde depende de la asociación

Parece que podría tener más sentido tener un campo booleano en la tabla de usuarios que defina si un usuario es administrador o no.

Dicho esto, es posible que deba definir la relación en sus modelos si aún no está allí. Técnicamente, en función de los nombres de las tablas y las columnas (user_id), Cake debería preparar esto para usted, pero no recuerdo si es convencional tener nombres de modelos en plural (Usuarios, Administradores), por lo que es posible que esto no haya sucedido.

Usuario:

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

Administrador

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

Entonces, creo que necesitaría especificar alguna información sobre el administrador, o no tendrá ningún dato para guardar la asociación. En la vista:

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

Tenga en cuenta que estos campos se pueden ocultar si no desea que se ingrese nada.

Para guardar, crea un nuevo usuario a partir de los datos de la solicitud (tu formulario crea un usuario, pero puedes crear un administrador con el formulario y luego agregar entradas como usuario.nombre y usuario.apellido). 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);
}