php - Laravel 软删除在数据透视表中不起作用

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

我使用的是 Laravel 5.2。

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

我想在我的数据透视表上使用软删除。当我将一本书附加给用户时,该关系将插入到book_user表中。但是,当我分离此关系时,即使我将use SoftDeletes添加到数据透视表模型中,数据透视表中的记录也会被删除。

当我附加分离时,如何对数据透视表中的记录实现软删除?

最佳答案

我没有尝试使用带有数据透视表的软删除,但你说它不起作用。

只是一个想法,也许你可以使用 sync 而不是像这样的 detach

在此之前,您需要将 deleted_at 列添加到 book_user 表中,作为 DATETIME 而不是 TIMESTAMP。因为新版本的MYSQL不支持TIMESTAMP类型的NULL

软删除

$user->books()->sync(array(1 => array('deleted_at' => DB::raw('NOW()'))));

获取

您还可以对预加载施加约束:

public function books()
{
    return $this
    ->hasMany('Book')
    ->whereNull('book_user.deleted_at');
}

关于php - Laravel 软删除在数据透视表中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36555243/

相关文章:

php - 在 Laravel 5 的存储库中使用构造函数注入(inject)有什么好处?

php - 在表中输入高级 SQL 查询 - 不是唯一的表别名 mysql

php - 根据值添加数组项并删除 php 中的重复值

php - Javascript 和 PHP 时间戳不同,给出不同的时间

php - 在 laravel 中搜索 undefined variable

php - 登录 Controller 中覆盖的经过身份验证的方法不起作用

php - 如何从 View 将参数传递给模型函数?

php - 如何使用php在mysql中特定用户登录后显示数据?

mysql - 显示时从 Laravel 中的文件名中删除 time() 字符串

php - Laravel 5.5 - 图像验证不起作用