Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带Laravel的雄辩模型宏_Php_Laravel_Model_Eloquent_Macros - Fatal编程技术网

Php 带Laravel的雄辩模型宏

Php 带Laravel的雄辩模型宏,php,laravel,model,eloquent,macros,Php,Laravel,Model,Eloquent,Macros,我试图根据角色类型在雄辩的模型上设置隐藏属性。例如,我在下面编写的宏将调整集合中的模型,以隐藏给定角色的字段 Collection::macro('roleRestrict', function () { switch (true) { case RoleChecker::isUserGuest(): return $this->map(function (AuthorisedAttributeInterface $model) {

我试图根据角色类型在雄辩的模型上设置隐藏属性。例如,我在下面编写的宏将调整集合中的模型,以隐藏给定角色的字段

Collection::macro('roleRestrict', function () {
    switch (true) {
        case RoleChecker::isUserGuest():
            return $this->map(function (AuthorisedAttributeInterface $model) {
                $model->setGuestRoleHiddenFields();
                return $model;
            });
        default:
            return $this;
    }
});
可与
MyModel::all()->roleRestrict()一起使用

是否可以编写适用于集合外部单个模型对象的类似宏?这将按如下方式执行:

MyModel::findOrFail($id)->roleRestrict()
或者,即使模型急于加载belongsTo关系:

AnotherModel::with('myModelRelationship')->findOrFail($id)->roleRestrict()

如果你想使用
MyModel::findOrFail($id)->roleRestrict()
,你就必须在你的模型中实现一个公共函数,不是吗?@NEXTLEVELSHIT,这不适用于即时加载。如果你有依赖关系,你可以“懒洋洋地”加载它们:您只需声明任务应包含哪些关系。你已经试过了吗?我知道你要去哪里,但我想避免在模型级别使用这种基于角色的业务逻辑,我更愿意将其提取到更高的级别,例如集合宏。我最近编写了一个小程序包来实现这一点。。。通过宏向雄辩的模型添加方法:查看它,并让我知道它是否有用!=)