通过Laravel 5.4中的Eloquent立即插入父母和子女

时间:2017-05-05 22:53:44

标签: php laravel laravel-5 eloquent

我试图通过Eloquent插入两个相关的对象,并在其中一个表上得到Integrity constraint violation error。这是我正在尝试的:

关系的表示:

class DataParticipant extends Model
{
    public function data_config()
    {
        return $this->hasOne('App\Models\DataConfig');
    }
}

class DataConfig extends Model
{
    public function data_participant()
    {
        return $this->belongsTo('App\Models\DataParticipant');
    }
}

然后,我正在尝试以下方法:

$dataParticipant = new DataParticipant();

$dataParticipant->ip = // ip
$dataParticipant->code = // code
$dataParticipant->study_name = // study


// Prepare the config child.

$dataConfig = new DataConfig();
$dataConfig->config = // config via json_encode 


// Store the child associated to the parent.

$dataParticipant->data_config()->save($dataConfig);

错误位于data_participant_id列,属于DataConfig模型。我的猜测是,两者之间没有id可以链接。我想问你:

  • 如何在不先保存DataParticipant然后从数据库中检索它然后将DataConfig存储在结果id上的情况下完成此操作?

1 个答案:

答案 0 :(得分:0)

首先保存第一个模型

$dataParticipant->save ();

然后保存第二个模型

$dataParticipant->data_config()->save($dataConfig);

这根本不会从数据库中检索数据,$dataParticipant id会自动设置最后一个插入ID