我有一个系统,用户连接到很多不同的表,这些表也连接到不同的表。当我从数据库中删除用户时,也应删除与该用户关联的每个关系。我项目的关系设置如下所示
- A User user has multiple orders.
- An Order has multiple order items.
- Order Items belong to an order.
- A webshop belongs to a user and a webshop has One Main Setting.
- Main settings belongs to a webshop and has One address.
- Address belongs to main setting
当id为1的用户被删除时。 user_id等于1的所有订单也应该删除,没有问题。但user_id为1的订单也有很多order_items。例如,假设此特定订单的ID为3.还应删除order_id为3的所有order_items。这就是我遇到这个问题的地方。
我的尝试
通过执行此操作删除用户
$user = User::find($id);
$user->delete();
通过执行以下操作删除关系:
$user->orders()->delete();
但是如何删除与删除的所有订单相关联的订单商品?我的尝试是:
$user->orders()->orderitems()->delete();
但不幸的是,这不起作用。 模型中的所有关系都非常好。所以可用的所有属性都是
User
- Orders();
- Webshops();
Order
- Orderitems();
Webshop
- Mainsetting();
Mainsetting
- Address();
我如何完成上述工作?
答案 0 :(得分:4)
如果您使用的是MySQL(或任何支持级联的RDBMS),您可以在数据库级别级联删除。如果不是,则必须在控制器上或通过模型事件监听功能手动处理。 请参阅详细说明外键约束的documentation on migrations。
Schema::create('order_items', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('order_id');
$table->timestamps();
$table->foreign('sell_order_id')
->references('id')
->on('orders')
->onDelete('cascade');
});
注意:Laravel支持soft deletes开箱即用,以及级联软删除,请参阅以下文章https://laravel-news.com/cascading-soft-deletes-eloquent
答案 1 :(得分:0)
使用外键并在迁移中删除级联。
那么您只需要删除订单即可自动删除ordesr详细信息。