Laravel - 雄辩的自我关系

Posted

技术标签:

【中文标题】Laravel - 雄辩的自我关系【英文标题】:Laravel - Eloquent Self Relationship 【发布时间】:2014-05-14 12:02:40 【问题描述】:

我的很多模型和其他代码都在这里并且与这个问题有关:laravel - Query Builder vs. Eloquent

我有这个问题:

        $recipes = Recipe::whereHas('categories', function($q) use ($cat_id) 
        $q->where('category_id', $cat_id);
    )->with('user')->get();  

如果我选择(示例)ID = 5,效果会很好。我得到所有 category_id = 5 的食谱。

如果... 假设 category_id = 5 的父级 ID = 1(主要类别的 ID 为 1-3,所有子级的 ID 为 4 到 x)。

我现在需要,如果有人点击主类别,在这种情况下,ID = 1,我可以获得与主类别相关的所有食谱,包括孩子。所以我从第 1 类和第 5 类(依此类推)中获取所有信息。

我不知道如何设置关系或构建查询。

其次,我也需要将这个功能实现到网站的“高级搜索”方法中,但我认为,如果我能解决这个问题,剩下的就是“容易”。

感谢您的帮助。谢谢!

【问题讨论】:

【参考方案1】:

根据title 和您在问题中描述的详细信息,我认为,您希望使用同一模型的另一个字段/列和id 字段与模型本身建立关系,在这种情况下您可以使用以下方式创建这样的关系:

class Category extends Eloquent 

    public function recipes()
    
        return $this->hasMany('Category', 'category_id');
    


根据这种关系,如果id1 并且如果category_id 包含@987654331 @ 则id=1category_id=1 之间存在关系。

几天前我就同一件事写了一篇文章,您可以阅读这篇文章以更好地了解我在说什么:LARAVEL – MODEL RELATIONSHIP TO ITSELF。

【讨论】:

关系已经存在。我有一个 parent_category 和 child_categories 方法,所以这很好。我需要选择所有相关类别,包括我的 sql 语句或 Eloquent / Query 中的主类别。 这正是我已经回答的,id 是父项,category_id 是子项,你看文章了吗?您应该阅读它以了解这个想法,我在类似的事情中使用过它。

以上是关于Laravel - 雄辩的自我关系的主要内容,如果未能解决你的问题,请参考以下文章

为啥 laravel 雄辩的关系返回空数组

雄辩的关系,模型的链接(Laravel 5.4)

Laravel - 节省雄辩的关系

Laravel 雄辩的一对一通过(级别/树)关系

Laravel,雄辩的 n:m 关系

laravel 雄辩的关系查询