插入包含关系数据的行?

时间:2015-08-11 19:54:30

标签: laravel laravel-5 eloquent laravel-5.1

这是一个简化版本,但......用户可以提交包含其姓名和资格的表格。

我有两张桌子 - 用户和资格。用户具有许多资格。资格证书有一个用户。

我这样保存:

$user = new User;
$user->first_name = 'Derek';

$qualification = new Qualification;
$qualification->qualification = 'History Degree';

DB::transaction(function() use ($user, $qualification) {
   $user->save();
   User::find($user->id)->qualifications()->save($qualification);
});

我的问题是:

这是向表中插入行的正确方法吗?它的关系是什么?还有更好的方法吗?

我的第二个问题......这一行:

User::find($user->id)->qualifications()->save($qualification);

这可能有点疯狂,但我只是想向我解释一下,$ user-> id获取先前插入的行的id,如果两个人同时插入,我将如何确定它会得到正确的ID?在用户A保存,然后用户B保存,然后第一个User :: find位为用户A运行,但这将找到用户B的id。这是交易的来源吗?

1 个答案:

答案 0 :(得分:-1)

通过执行此操作保存用户之前:

user->save();

我认为您应该首先将“资格”保存到该用户。只要您的代码功能正如您目前所拥有的那样,我认为这样就可以解决问题:

$user->qualifications()->save($qualification);

然后再做

user->save();

如果你能按顺序工作,那么你几乎不必担心获取错误的用户ID并转换错误用户的资格,如果他们要在大约同一时间输入他们的信息。 / p>