Laravel与数据库事务同步

dluptydi  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(136)

我使用Maatwebsite\Excel在laravel中创建了一个导入Excel。对于每一行,我必须进行多个操作,我使用onRow方法和默认的数据库事务,以避免在错误的情况下加载部分数据。
因此,在这个方法中,我创建了一个User,然后将其与指定的角色(多对多关系)相关联。下面是代码:

$user = User::firstOrCreate([
    'username' => $row['username'],
],[
    'name' => $row['name'],
    'surname' => $row['surname'],
    'email' => $row['email'],
]);

$user->roles()->sync(explode(',', $row['roles']));

但是方法sync失败了,因为事务没有创建$user,所以没有任何id可以插入到数据透视表中。

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into `user_role` (`role_id`, `user_id`) values (1, ?))

我希望你能帮助我!谢谢

xjreopfe

xjreopfe1#

谢谢你@Yannick Beuchat,你的评论不是解决方案,但让我找到了正确的答案。问题是我的模型User扩展了Pivot类而不是Model类。在Pivot类中,属性$incrementing被设置为false。在model User中添加这个解决了这个问题。

public $incrementing = true;

再次感谢!

相关问题