考虑Laravel指南中有许多Through关系的基本示例,我试图直接使用具有类型100(仅作为示例)的帖子的雄辩的国家进行查询。查询HasManyThrough Laravel关系检索相关记录
countries
id - integer
name - string
users
id - integer
country_id - integer
name - string
posts
id - integer
user_id - integer
title - string
type_id - integer
TYPE_ID在帖子是我的特殊情况..
所以,我创建了创建通过用户帖子的关系全国模型的关系。我想要达到的结果是国家名单,并在每个国家内列出该国用户创建的职位。
//Country.php
public function posts()
{
return $this->hasManyThrough(
'Post', 'User', 'country_id', 'user_id'
);
}
我能复制我想以其他方式实现的结果,但我想知道为什么下面的雄辩查询不返回预期的结果:
$postsGroupedByCountries = Country::with([
'posts' => function ($query) {
$query->where('type_id', 100);
}
])->get();
的回归该查询是几个国家的所有职位没有数据。用Laravel Eloquent做这个查询的正确方法是什么?
首先尝试:
$postsGroupedByCountries = Country::whereHas('posts', function ($query) {
$query->where('type_id', 100);
})->get();
第二个尝试:
$postsGroupedByCountries = Country::whereHas('posts', function ($query) {
$query->where('type_id', 100)->groupBy('posts.id');
})->get();
第三次尝试:
$postsGroupedByCountries = Country::whereHas('posts', function ($query) {
$query->where('type_id', 100);
})->get();
$postsGroupedByCountries = $postsGroupedByCountries ->map(function($country){
$country->load('posts');
return $country;
});
而且我已经alread Ÿ在负载内尝试使用封闭的地方。但它也没有工作。结果是一样的。
但我想提供加载的数据发布。 WhereHas会做到这一点?我认为whereHas只是有条件的。 –
我认为它会返回你加载的帖子,试一试,看看结果是什么。我一直在引用这篇文章,顺便说一句:https://stackoverflow.com/questions/30231862/laravel-eloquent-has-with-wherehas-what-do-they-mean – btl
帖子未加载。我想这与哪里有延迟加载。我需要在雄辩的查询之后做一个foreach,然后调用$ country-> posts来获取它并放到国内。 –