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