Model 里的 unguard () 有啥用,我看书里删数据表之前 unguard () 再删?

但是我注掉这一行,回滚数据表照样删掉了
只是知道模型里的guard属性,这种用法什么意思,求解

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
月光
最佳答案

这里不应该用 Model::unguard()Model::reguard() 这两个方法。

从功能上讲,这两个方法是在做数据填充的时候对模型字段的一种保护措施,但教程里是利用 DB::table() 直接指明使用 DB 类然后删除数据表,所以也就不涉及 Model。

所以,没用。

6年前 评论
讨论数量: 8
月光

这里不应该用 Model::unguard()Model::reguard() 这两个方法。

从功能上讲,这两个方法是在做数据填充的时候对模型字段的一种保护措施,但教程里是利用 DB::table() 直接指明使用 DB 类然后删除数据表,所以也就不涉及 Model。

所以,没用。

6年前 评论

unguard负责解除自动填充操作限制,reguard负责恢复限制

7年前 评论

@zjx 但是我注掉,好像没啥影响

7年前 评论

@lukedever 在这里应该是没有起作用,我理解unguard影响的是字段不是表,所以有它没它表都能删除 对这里是删除的数据,你可以看下对应的model里面有没有相应的$guard属性,如果没有这个方法应该就可有可无

7年前 评论

@zjx 教程里

        Model::unguard();
        DB::table($tableNames['role_has_permissions'])->delete();
        DB::table($tableNames['model_has_roles'])->delete();
        DB::table($tableNames['model_has_permissions'])->delete();
        DB::table($tableNames['roles'])->delete();
        DB::table($tableNames['permissions'])->delete();
        Model::reguard();

是删除字段,模型里的$guard属性包含的是不想被批量赋值的属性的数组,文档里也没看到这种用法的介绍,所以有点困惑。

7年前 评论

你可以参考一下 https://stackoverflow.com/questions/327954...
感觉guard是在新增表数据的时候才有用的,不知道为什么这里删除也在用

7年前 评论
    /**
     * Disable all mass assignable restrictions.
     *
     * @param  bool  $state
     * @return void
     */
    public static function unguard($state = true)
    {
        static::$unguarded = $state;
    }

    /**
     * Enable the mass assignment restrictions.
     *
     * @return void
     */
    public static function reguard()
    {
        static::$unguarded = false;
    }

这里是源码,是Illuminate\Database\Eloquent\Concerns\GuardsAttributes trait 的方法。作用好像是一楼说的解除字段赋值的限制,但是这里是针对删除数据表的。不知道为什么用这个.....也不太明白,不知道楼主解决了没

7年前 评论
月光

这里不应该用 Model::unguard()Model::reguard() 这两个方法。

从功能上讲,这两个方法是在做数据填充的时候对模型字段的一种保护措施,但教程里是利用 DB::table() 直接指明使用 DB 类然后删除数据表,所以也就不涉及 Model。

所以,没用。

6年前 评论

@Soldoros 谢谢,我也觉得没用

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!