通过 laravel 中的关系进行咨询

Posted

技术标签:

【中文标题】通过 laravel 中的关系进行咨询【英文标题】:Consultation through relationships in laravel 【发布时间】:2020-05-30 14:22:16 【问题描述】:

我在这里无休止地寻找一个回答我的问题的问题,但我没有找到它。我的问题如下,我有 3 个模型:用户、帖子和评论。其中 user 与一对多发布有关系,而 Post 也与一对多 cmets 有关系。如何在所有帖子上获取所有用户的 cmets? 目前我的解决方案如下所示:

模型用户:

    public function comments()
        $comments = array();

        foreach ($this->posts()->get() as $el) 
            foreach ($el->posts()->get() as $nEl) 
                array_push($comments, $nEl);
            
        
        return collect($comments);
    

如果有的话,我想要一个更便宜的 laravel 原生解决方案。

【问题讨论】:

在docs 中检查has many through。始终牢记 laravel 建议的命名约定以避免大多数问题(即单数/复数,小写/大写等)。顺便说一句,你的情况是基本的hasManyThrough 关系。 【参考方案1】:

在您的 User 模型上,类似于:

public function getComments()

    return Comment::whereHas('posts', function ($query) 
        $query->where('user_id', $this->id);
    )->get();

另见: https://laravel.com/docs/6.x/eloquent-relationships#has-many-through

【讨论】:

posts 在这种情况下是数据库中表的名称还是模型的名称? posts 在这种情况下是关系的名称

以上是关于通过 laravel 中的关系进行咨询的主要内容,如果未能解决你的问题,请参考以下文章

我想自学laraver,请诸位前辈给一些建议,谢谢

laraver框架学习------工厂模型填充测试数据

Laravel 延迟加载的问题

Laravel 多对多中的雄辩关系通过

laravel 安装 laravel-modules 保姆级别教程

数据库中的计算字段 - Laravel