Laravel雄辩的方法链接到工匠修补匠

时间:2020-04-20 10:00:29

标签: php laravel eloquent laravel-7 tinker

我目前正在学习 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

我真正想要实现的是,

  1. 函数/方法链接,我可以在 Artisan Tinker 和Normal Code中使用(就像以前的链接一样,回显功能),因此我可以更轻松地进行测试在工匠修补匠上。有可能吗?

  2. 是否可以将该方法/功能( main sub )放在功能模型上?我认为,既然这样,我将更容易维护代码。就像“哦,这与功能有关”,因此,如果需要进行一些更改/调整,我可以轻松导航。


提前致谢! :)


更新
经过测试,我才意识到,可以做到这一点

$ role->功能-> find(1)-> sub

这将返回我以前期望的子功能
就目前而言,是否可以做 main ,并且仍然采用功能模型?
因此,方法链接可以做类似的事情,

$ user-> role->功能-> main


再次感谢!

1 个答案:

答案 0 :(得分:0)

针对那些正在寻求有关此特定问题的答案的人。

您可以在此处转到此link。这是我在Laracast论坛上问相同问题的链接。


以防万一,链接无效/旧或网站因某种原因无法访问或无法访问,这是我的一小部分答案,它使我能够解决这个特定问题。

请参阅Tim MacDonald的这篇博客文章,他在其中扩展了collection类以创建自己的自定义collection。 https://timacdonald.me/giving-collections-a-voice/


对此User - Hanley表示敬意,让我得到了答案! :)