我:这是一个混合问题|访客:( wtf?)这意味着什么?
我在一个问两个问题(因为它紧密耦合)
使用:Laravel 5.5和Mysql
1.如何在eloquent中删除相关模型?
我正在尝试删除 User
,它具有以下关系
belongsTo Address
,belongsTo Package
,hasMany Orders
,hasMany Comments
当 User
或 Post
被删除时 Orders
cascade _1358664_或 Product
被删除 COmments
cascade
现在如何删除 User
并自动关联 orders
& comments
已删除?
当我尝试删除 $user->delete()
laravel抛出异常时:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`cybertron`.`comments`, CONSTRAINT `comments_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) (SQL: delete from `users` where `id` = 4)
所以我决定使用一个事务来删除,用户,关联的订单和评论,以确保删除所有内容 .
但我没有在eloquent中找到任何事务,而是在查询构建器(DB)中 .
2.如果我使用来自DB的交易并使用eloquent来删除用户($ user-> delete),这会被视为交易吗?
喜欢:
DB::transaction(function() {
$user->comments->delete();
$user->orders->delete();
$user->delete();
});
如果没有,那么我如何与Eloquent进行交易?
任何帮助将不胜感激
2 回答
comments()
和orders()
而不是comments
和orders
@Marcin
如果您在模型上使用事件,为了级联删除,您需要确保了解在Query对象上运行delete与在Model对象上运行delete之间的区别
例如:$ this-> orders() - > delete(); - 这一行实际上并没有加载Order模型 - $ this-> orders() - 返回一个Query Object - 这一行实际上会运行一个DELETE SQL语句
为了在删除用户时按顺序启动删除事件,您必须执行foreach foreach($ user-> orders as $ order)$ order-> delete();
当user :: deletion事件启动时,加载用户的所有命令并调用delete;这将触发命令::删除事件,我们将加载所有注释对象并删除它们