【问题标题】:Laravel Soft Delete Not working in pivot tableLaravel 软删除在数据透视表中不起作用
【发布时间】:2017-05-28 13:36:44
【问题描述】:
我正在使用 Laravel 5.2。
我有 3 个表:book、user 和 book_user(数据透视表)。
我想在我的数据透视表上使用软删除。当我将attach 一本书给用户时,该关系被插入到book_user 表中。但是,当我 detach 这种关系时,即使我将 use SoftDeletes 添加到数据透视表模型中,数据透视表中的记录也会被删除。
当我使用attach 或detach 时,如何对数据透视表中的记录实施软删除?
【问题讨论】:
标签:
php
laravel
laravel-5
many-to-many
soft-delete
【解决方案1】:
我没有尝试使用带有数据透视表的软删除,但你说它不起作用。
只是一个想法,也许你可以像这样使用sync而不是detach;
在此之前,您需要将deleted_at 列添加到book_user 表中作为DATETIME 而不是TIMESTAMP。因为新版MYSQL不支持NULL为TIMESTAMP类型。
软删除
$user->books()->sync(array(1 => array('deleted_at' => DB::raw('NOW()'))));
获取
您还可以对 Eager Load 施加约束:
public function books()
{
return $this
->hasMany('Book')
->whereNull('book_user.deleted_at');
}