尝试插入关系对象

时间:2014-08-20 14:17:38

标签: laravel eloquent

我从Laravel开始并需要帮助, 直截了当地说:

我的模特: 佩索阿(人)

class Pessoa extends Eloquent {
   protected $table= 'pessoas';
   public function usuario(){
      return $this->hasOne('Usuario', 'pessoa_id', 'id');
   }

Usuario(用户)

class Usuario extends Eloquent {
   protected $table= 'usuarios';
   public function pessoa(){
      return $this->belongsTo('Pessoa', 'pessoa_id', 'id');
   }

我的行动方法(发布)

   public function salvar(){
    $pessoa = new Pessoa();
    $pessoa->nome = Input::get('nome');
    $pessoa->cpf = Input::get('cpf');

    $usuario = new Usuario();
    $usuario->email = Input::get(email);
    $usuario->senha = Hash::make(Input::get('senha'));
    $usuario->pessoa()->associate($pessoa);
    $usuario->push();

因此保留两个对象但不保存usuario(用户)表中的密钥pessoa(person)。 我究竟做错了什么?

2 个答案:

答案 0 :(得分:1)

associate()适用于已有的模型。由于$usuario是新的,因此您需要使用save(),将新对象传递给$pessoa usuario关系。

代替:

$usuario->pessoa()->associate($pessoa);
$usuario->push();

使用:

$pessoa->save();
$pessoa->usuario()->save($usuario);

答案 1 :(得分:1)

为了关联,外键需要可用,否则实际上没有任何关联。

尝试$pessoa->save();pessoa_id模型上的pessoa可用。

然后您可以使用$usuario->pessoa()->associate($pessoa);,因为它现在会知道要pessoa_id保存的usuario