我使用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, ?))
我希望你能帮助我!谢谢
1条答案
按热度按时间xjreopfe1#
谢谢你@Yannick Beuchat,你的评论不是解决方案,但让我找到了正确的答案。问题是我的模型User扩展了Pivot类而不是Model类。在Pivot类中,属性
$incrementing
被设置为false
。在model User中添加这个解决了这个问题。再次感谢!