我使用的是Laravel 5.2。
我有3个表:book
,user
和book_user
(数据透视表)。
我想在数据透视表上使用软删除。当我attach
向用户提供一本书时,该关系将被插入book_user
表中。但是当我detach
这种关系时,即使我将use SoftDeletes
添加到数据透视表模型,也会删除数据透视表中的记录。
当我attach
或detach
时,如何为数据透视表中的记录实施软删除?
答案 0 :(得分:4)
我没有尝试使用带有数据透视表的软删除,但你说它不起作用。
只是一个想法,也许你可以使用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');
}