gpt4 book ai didi

mysql - 以一对多关系对 'many' 表进行 Elequent 查询

转载 作者:行者123 更新时间:2023-11-29 19:35:22 24 4
gpt4 key购买 nike

我有一个地址表和一个居民表以一对多的方式连接,以便查询

House::with('resident')->where('postcode', 'GL141PQ')->get();

会返回类似这样的内容

[{
"id": 806,
"code": "AYC8rk",
"postcode": "GL141PQ",
"address": "THE COTTAGE, ADSETT COURT, LONDON ",
"resident": [{
"id": 5441,
"firstname": "THOMAS",
"surname": "MARSHALL"
}, {
"id": 5442,
"firstname": "ANNA",
"surname": "RAYMOND"
}, {
"id": 6188,
"firstname": "WILL",
"surname": "MARSHALL"
}]
}]

如果该邮政编码中有很多属性,并且我需要扩展查询以将姓氏包含在 Residents 表中,我会感到困惑。下面的代码显然不起作用,所以我假设我需要以某种方式迭代连接的表。

House::with('resident')
->where('postcode', 'GL141PQ', 'and')
->where('surname', 'MARSHALL')
->get();

非常感谢您的帮助!

最佳答案

像这样使用 Laravel 的 with() 只是将居民延迟加载到您的 House 模型中,而不是加入其中。

你可能可以做这样的事情(未经测试):

House::with(['resident' => function($query) use ($surname) {
$query->where('surname', $surname);
}])
->where('postcode', 'GL141PQ')
->get();
<小时/>

编辑:

然后您必须自己添加联接。如前所述,with() 是延迟加载,而不是加入。

House::with('resident') // lazy load all residents after query is done, you don't want to filter here
->leftJoin('resident', 'house.id', '=', 'resident.house_id')
->where('resident.surname', $surname)
->where('house.postcode', 'GL141PQ')
->groupBy('house.id')
->get();

House::with('resident') // lazy load all residents after query is done, you don't want to filter here
->leftJoin('resident', function($join) use ($surname) {
$join->on('house.id', '=', 'resident.house_id')
->where('resident.surname', $surname)
})
->where('house.postcode', 'GL141PQ')
->groupBy('house.id')
->get();

这些将为您提供所需的结果。

请记住,Laravel 的 ->count()->groupBy(x) 彼此不太喜欢。

关于mysql - 以一对多关系对 'many' 表进行 Elequent 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com