考虑到Laravel指南中的基本示例有许多通过关系,我试图直接查询雄辩的、帖子类型为100的国家(只是一个例子)。
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模型中创建了一个关系,通过用户创建了与帖子的关系。我想要实现的结果是列出一个国家,以及每个国家内由该国用户创建的帖子。
//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雄辩?
第一次尝试:
$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;
});
我已经试着在负载内部使用where的闭包。但它也不起作用。结果是一样的。
你渴望在每个国家加载所有的帖子,这就是为什么你会看到它们。我会尝试将查询修改为:
$postsGroupedByCountries = Country::whereHas('posts', function ($query) {
$query->where('type_id', 100)
})->get();
看看你能得到什么回报。
对于查询,必须将与
和一起使用
whereHas
将限制Country
查询仅显示具有指定id的职位的国家,但不会在结果中加载这些职位with()
随后将在结果中加载帖子
,但由于它是在第一次查询执行后调用的,因此它不知道在哪里有
约束,并且由于它没有通过任何约束,因此它将加载每个国家/地区的所有帖子。要加载具有相同约束的国家
帖子,您还需要使用方法将其传递给
。
所有这些加在一起看起来像:
$countries = Country::whereHas('posts', function($query) {
return $query->where('type_id', 100);
})
->with(['posts' => function($query) {
return $query->where('type_id', 100);
}])
->get();
当玩家点选菜单上的「系统 - 返回之前」后,可以返回上一个段落,通过记录就是指定这种自动存储位置的功能。 要使用通过记录功能,需要用到 record 指令、此外还要对 Config.tjs 的 recordHistoryOfStore 进行设定。 「系统 - 返回之前」这一菜单选项默认是不显示的,但是可以在 Config.tjs 中将 goBackMenuItem.visible 设定为 t
> 在我的视图中,我可以输出,如下所示: 我可以遍历,比如: 但是是否可以迭代(我知道只有一个-- ,请参见#2),并且对于每个迭代他们的? 我想我的模特关系中有什么不对劲的地方。我还尝试用在Artist.php中定义关系(我认为说“每个艺术家都有许多乐器”更有意义,但这给了我一个错误,因为它需要一个名为的表,而且它还试图检索该表中不存在的列(比如)。
我有3个模型在我的项目: 用户型号代码: 职业标准守则 迁移: 用户职业模型代码 迁移: 当我尝试这个代码时,我通过他的名字搜索用户,并得到职业名称,然后计算该职业的用户。 代码: 我收到错误消息: 照明\数据库\查询异常:SQLSTATE[23000]:完整性约束违反:1052列'id'在其中子句是含糊不清的(SQL:选择*从存在的职业(选择*从用户内连接user_professionsuser
我在Books表和Authors表之间有多对多的关系。透视表(author_book)包含author_id和book_id。
我有users表,它与vendordetails表有hasOne关系。 vendordetails表包含country_id、state_id和city_id,与Country、State和City模型有归属关系。 vendorDetail.php模型为:- 如果我查询users表,如何获取国家、州和城市的记录。 在这个查询中,它只找到vendordetails表的结果,我还想要country、s
我有3个模型和一个透视表: 学校年-模型 ID 课程模式 ID schoolyear_id 课程\学生-数据透视表 课程号 学生证 学生模型 ID 关系是: 一学年有许多课程 一门属于任何学生的课程 在任何课程中的学生 什么是最快、更优雅的方法来找到学生进入一个学年,并且能够按学生属性进行排序?