我目前正在学习 Laravel Eloquent ,并尝试使用这种数据库结构在 Artisan Tinker 上进行测试
users
- id
- role_id
roles
- id
- name
role_features
- id
- role_id
- feature_id
features
- id
- parent_id
在功能表上,我们看到有 parent_id ,这意味着有一个主要功能和子功能
所以我的问题是,是否可以做类似的事情,
$ main_features = $ user-> role-> features-> main
(上面,我们假设我们已经做过类似User :: find(1)的操作,以获取用户详细信息)
并在获得主要功能之后,是否可以进行递归(或其他方法)来取消其子功能?
也许,像这样,
$ main_features-> sub
我已经在我的功能模型上尝试过此操作,但是它返回错误
public function main() {
return $this->belongsTo('App\Feature', 'parent_id')
->where(
function ($group_q) {
$group_q->whereNull('parent_id')
->orWhere('parent_id', 0);
})
->with('main');
}
public function sub() {
return $this->hasMany('App\Feature', 'parent_id')
->with('sub');
}
BadMethodCallException,消息为“方法照亮/数据库/口才/集合::主要不存在。”
在发生此错误之前,我可以做类似的事情,
$ user-> role->功能
要获得该用户拥有的所有功能
由于我不太熟悉Laravel术语,因此我不确定google
所需的内容。
顺便说一下,这是我之前尝试过的源引用
Eloquent Parent-Child relationship on same model
Unable to get and display grandchild relationship for dynamic menu in laravel 5.8
因此,是否有可能做类似的事情,
$ main_features = $ user-> role-> features-> main
(上面,我们假设我们已经做过类似User :: find(1)的操作,以获取用户详细信息)
并在获得主要功能之后,是否可以进行递归(或其他方法)来取消其子功能?
也许,像这样,
$ main_features-> sub
我真正想要实现的是,
函数/方法链接,我可以在 Artisan Tinker 和Normal Code中使用(就像以前的链接一样,回显功能),因此我可以更轻松地进行测试在工匠修补匠上。有可能吗?
是否可以将该方法/功能( main 或 sub )放在功能模型上?我认为,既然这样,我将更容易维护代码。就像“哦,这与功能有关”,因此,如果需要进行一些更改/调整,我可以轻松导航。
提前致谢! :)
$ role->功能-> find(1)-> sub
这将返回我以前期望的子功能。
就目前而言,是否可以做 main ,并且仍然采用功能模型?
因此,方法链接可以做类似的事情,
$ user-> role->功能-> main
再次感谢!
答案 0 :(得分:0)
针对那些正在寻求有关此特定问题的答案的人。
您可以在此处转到此link。这是我在Laracast论坛上问相同问题的链接。
请参阅Tim MacDonald的这篇博客文章,他在其中扩展了collection类以创建自己的自定义collection。 https://timacdonald.me/giving-collections-a-voice/