Laravel Soft Delete无法在数据透视表中使用

时间:2016-04-11 17:23:19

标签: php laravel laravel-5 many-to-many soft-delete

我使用的是Laravel 5.2。

我有3个表:bookuserbook_user(数据透视表)。

我想在数据透视表上使用软删除。当我attach向用户提供一本书时,该关系将被插入book_user表中。但是当我detach这种关系时,即使我将use SoftDeletes添加到数据透视表模型,也会删除数据透视表中的记录。

当我attachdetach时,如何为数据透视表中的记录实施软删除?

1 个答案:

答案 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');
}