我目前正在学习Laravel Eloquent并尝试使用这种数据库结构在Artisan Tinker上进行测试
users
- id
- role_id
roles
- id
- name
role_features
- id
- role_id
- feature_id
features
- id
- parent_id
在features表上,我们可以看到有parent_id,这意味着有一个main-features和sub-features
所以我的问题是,是否有可能做类似的事情,
$main_features = $user->role->features->main
(上面,我们假设,我们已经做了类似 User::find(1) 或其他的事情,以获取用户详细信息)
在获得main-features之后,我们是否可以使用递归(或其他方法)来提取其子功能?
也许,像,
$main_features->子
我已经在我的Feature模型上尝试过这个,但它返回一个错误
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 'Method Illuminate/Database/Eloquent/Collection::main 不存在。'
在那个错误之前,我可以做类似的事情,
$用户->角色->功能
获取该用户拥有的所有功能
我不太确定我需要什么google
才能找到答案,因为我对 Laravel 术语并不十分熟悉。
顺便说一下,这是我之前尝试过的源参考
所以,再次,是否有可能做类似的事情,
$main_features = $user->role->features->main
(上面,我们假设,我们已经做了类似 User::find(1) 或其他的事情,以获取用户详细信息)
在获得main-features之后,我们是否可以使用递归(或其他方法)来提取其子功能?
也许,像,
$main_features->子
我真正想要实现的是,
一个函数/方法链接,我可以在Artisan Tinker和 Normal Code 中使用(就像以前的链接一样,以呼应功能),因此我更容易在Artisan Tinker上进行测试。那可能吗?
是否可以将该方法/功能(main或sub)放在Feature模型上?因为,我认为,我更容易维护代码。比如,“哦,这与功能有关”,因此,如果我需要进行一些更改/调整,我可以轻松导航。
提前致谢!:)
更新
经过测试,我才意识到,可以这样做
$role->features->find(1)->sub
其中,将返回sub-features,这是我之前所期望的。
就目前而言,是否有可能做main并且它仍然在Feature模型上?
所以,方法链可以做类似的事情,
$用户->角色->功能->主要
再次感谢!