这是一个简化版本,但......用户可以提交包含其姓名和资格的表格。
我有两张桌子 - 用户和资格。用户具有许多资格。资格证书有一个用户。
我这样保存:
$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。这是交易的来源吗?
答案 0 :(得分:-1)
通过执行此操作保存用户之前:
user->save();
我认为您应该首先将“资格”保存到该用户。只要您的代码功能正如您目前所拥有的那样,我认为这样就可以解决问题:
$user->qualifications()->save($qualification);
然后再做
user->save();
如果你能按顺序工作,那么你几乎不必担心获取错误的用户ID并转换错误用户的资格,如果他们要在大约同一时间输入他们的信息。 / p>