Laravel Eloquent Artisan Tinker 上的方法链接
Laravel Eloquent Method Chaining on Artisan Tinker
我目前正在学习 Laravel Eloquent 并尝试在 Artisan Tinker 上进行测试,这种数据库结构
users
- id
- role_id
roles
- id
- name
role_features
- id
- role_id
- feature_id
features
- id
- parent_id
在featurestable上,我们可以看到有parent_id,也就是说有一个主要特征和子特征
所以我的问题是,是否可以做类似的事情,
$main_features = $user->role->features->main
(以上,我们假设,我们已经做了类似 User::find(1) 的事情,否则,获取用户详细信息)
并且在获得 main-features 之后,我们是否可以做一个递归(或者其他方法)来提取它的 sub-features?
也许,像,
$main_features->sub
我已经在我的 Feature 模型上试过了,但是 return 出错
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 with message 'Method Illuminate/Database/Eloquent/Collection::main does not exist.'
在那个错误之前,我可以做类似的事情,
$user->role->features
获得该用户拥有的所有功能
我不太确定我需要 google
什么才能找到答案,因为我不太熟悉 Laravel 术语。
顺便说一下,这是我之前尝试过的参考源
所以,再一次,是否可以做类似的事情,
$main_features = $user->role->features->main
(以上,我们假设,我们已经做了类似 User::find(1) 的事情,否则,获取用户详细信息)
并且在获得 main-features 之后,我们是否可以做一个递归(或者其他方法)来提取它的 sub-features?
也许,像,
$main_features->sub
我真正想要实现的是,
一个函数/方法链接,我可以在 Artisan Tinker 和 Normal Code 中使用(像以前的链接一样,以呼应功能),所以我可以更轻松地在 Artisan Tinker 上进行测试。这可能吗?
是否可以将 method/function(main 或 sub)放在 [=67 上=]特征型号?因为,我认为,我会更容易维护代码。比如,"ohhh, this is related to Feature",那么,如果我需要做一些事情,我可以轻松导航 changes/adjustments。
提前致谢! :)
更新
经过测试,我才意识到,可以这样做
$role->features->find(1)->sub
其中 return 子功能 ,我之前期待的。
至于现在,是否有可能,做 main 并且它仍然在 Feature 模型上?
所以,方法链可以做类似的事情,
$user->role->features->main
再次感谢!
对于那些正在寻求这个特定问题的答案的人。
你可以到这里 link。这是我在 Laracast 论坛上问同样问题的 link。
以防万一,link 已经死了/旧了,或者网站不知何故关闭或无法访问,这里是我的一小部分答案,可以帮助我解决这个特定的问题。
Have a look at this blog post by Tim MacDonald where he extends the collection class to create his own custom collections. https://timacdonald.me/giving-collections-a-voice/
感谢这个 User - Hanley,引导我找到答案! :)
我目前正在学习 Laravel Eloquent 并尝试在 Artisan Tinker 上进行测试,这种数据库结构
users
- id
- role_id
roles
- id
- name
role_features
- id
- role_id
- feature_id
features
- id
- parent_id
在featurestable上,我们可以看到有parent_id,也就是说有一个主要特征和子特征
所以我的问题是,是否可以做类似的事情,
$main_features = $user->role->features->main
(以上,我们假设,我们已经做了类似 User::find(1) 的事情,否则,获取用户详细信息)
并且在获得 main-features 之后,我们是否可以做一个递归(或者其他方法)来提取它的 sub-features?
也许,像,
$main_features->sub
我已经在我的 Feature 模型上试过了,但是 return 出错
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 with message 'Method Illuminate/Database/Eloquent/Collection::main does not exist.'
在那个错误之前,我可以做类似的事情,
$user->role->features
获得该用户拥有的所有功能
我不太确定我需要 google
什么才能找到答案,因为我不太熟悉 Laravel 术语。
顺便说一下,这是我之前尝试过的参考源
所以,再一次,是否可以做类似的事情,
$main_features = $user->role->features->main
(以上,我们假设,我们已经做了类似 User::find(1) 的事情,否则,获取用户详细信息)
并且在获得 main-features 之后,我们是否可以做一个递归(或者其他方法)来提取它的 sub-features?
也许,像,
$main_features->sub
我真正想要实现的是,
一个函数/方法链接,我可以在 Artisan Tinker 和 Normal Code 中使用(像以前的链接一样,以呼应功能),所以我可以更轻松地在 Artisan Tinker 上进行测试。这可能吗?
是否可以将 method/function(main 或 sub)放在 [=67 上=]特征型号?因为,我认为,我会更容易维护代码。比如,"ohhh, this is related to Feature",那么,如果我需要做一些事情,我可以轻松导航 changes/adjustments。
提前致谢! :)
更新
经过测试,我才意识到,可以这样做
$role->features->find(1)->sub
其中 return 子功能 ,我之前期待的。
至于现在,是否有可能,做 main 并且它仍然在 Feature 模型上?
所以,方法链可以做类似的事情,
$user->role->features->main
再次感谢!
对于那些正在寻求这个特定问题的答案的人。
你可以到这里 link。这是我在 Laracast 论坛上问同样问题的 link。
以防万一,link 已经死了/旧了,或者网站不知何故关闭或无法访问,这里是我的一小部分答案,可以帮助我解决这个特定的问题。
Have a look at this blog post by Tim MacDonald where he extends the collection class to create his own custom collections. https://timacdonald.me/giving-collections-a-voice/
感谢这个 User - Hanley,引导我找到答案! :)