我正在修改Laravel 5.3 RegisterController
中的原始方法:
protected function create(array $data) {
DB::beginTransaction();
$user = User::create([
'id' => $this->generateID(),
'email' => $data['email'],
'password' => bcrypt($data['password']),
'active' => 1
]);
if (!$user) {
DB::rollback();
}
DB::commit();
return $user;
}
如果我在内部(或外部)交易中检查dd($user)
,我会获得id=0
。
只有当我提交事务时,生成的ID才会保存到DB中,应该是。
我错过了什么?为什么ID在方法中显示为0,但在DB中显示为生成ID?
我想在:
中使用$ user-id$profile = Profile::create([
'id' => $user->id,
'name' => $data['name'],
]);
在同一交易中。
答案 0 :(得分:0)
您的错误可能是由于批量分配造成的,请确保您已将相应字段列入白名单:
class User extends Model {
protected $fillable = ['id', 'email', 'password', 'active'];
}
此外,最好使用闭包和try/catch
来更好地处理错误:
try {
DB::transaction(function() use($data) {
$user = User::create([
'id' => $this->generateID(),
'email' => $data['email'],
'password' => bcrypt($data['password']),
'active' => 1
]);
Profile::create([
'id' => $user->id,
'name' => $data['name']
]);
});
DB::commit();
catch (\Exception $e) {
DB::rollback();
//do something with $e->getMessage();
}
这可以解决您的问题。
答案 1 :(得分:0)
您不应该手动生成ID。我刚刚在一次交易中对它进行了测试,它确实有效:
$user = User::create([
'email' => $data['email'],
'password' => bcrypt($data['password']),
'active' => 1
]);
dd($user->id);