如何从laravel中的关系中获取对象

Posted

技术标签:

【中文标题】如何从laravel中的关系中获取对象【英文标题】:how to get objects from relation of relation in laravel 【发布时间】:2019-04-23 17:19:20 【问题描述】:

我有 3 个模型:课程、小组、学生

我想为 Course 中的游戏提供 2 个关系。

例如:我想要课程 1 (id=1) 的学生

课程有很多组(5,6,8),每个组有一个(36,38)或很多(35,37)个学生

如何让课程的所有学生都具有关系和口才

【问题讨论】:

您好,欢迎来到 ***。请花一些时间阅读帮助页面,尤其是名为"What topics can I ask about here?" 和"What types of questions should I avoid asking?" 的部分。更重要的是,请阅读the Stack Overflow question checklist。您可能还想了解Minimal, Complete, and Verifiable Examples。 【参考方案1】:

您可以使用 hasManyThrough

 public function games()
 
    return $this->hasManyThrough(Tournament::class, Group::class);
 

“has-many-through”关系为通过中间关系访问远距离关系提供了便捷的捷径。例如,一个 Country 模型可能通过一个中间 User 模型有许多 Post 模型。在此示例中,您可以轻松收集给定国家/地区的所有博客文章。

https://laravel.com/docs/5.7/eloquent-relationships#has-many-through

【讨论】:

很好...在这种情况下,我们不能使用 where 子句来表示中间关系(此处:组)?...例如:从组 where round=4 获取游戏?【参考方案2】:

如果您只需要游戏:

$games = Game::with(['some_relation_name', 'some_relation_name_2'])
    ->whereHas('group', function($query) 
        $query->whereHas('tournament', function($query) 
            $query->where('id', 1)
        );
    )
    ->get();

如果您需要带游戏的锦标赛,Anar 的选择会更好。

【讨论】:

以上是关于如何从laravel中的关系中获取对象的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 延迟加载的问题

如何从 Laravel 中的 hasMany() 关系中获取所有结果?

从 Laravel 中的 Mysql Pivot 表中获取列并返回 JSON 对象

如何从 laravel 中的中间表(多对多关系)中获取数据

从资源文件夹中获取图像 - Laravel

如何解决 laravel 数据表中的“尝试获取非对象的属性‘名称’”错误?