Php 带闭包的laravel查询
我试图查询数据库并在闭包函数中进行筛选,我的模型(简化)如下所示:Php 带闭包的laravel查询,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我试图查询数据库并在闭包函数中进行筛选,我的模型(简化)如下所示: Products: id, sale_id Sales: id, provider_id Provider: id [{ "id": 25, "sale": null }, { "id": 26, "sale": { "id": 15, "provider_id": 3 } }] 我希望所有产品都来自某个特定提
Products:
id,
sale_id
Sales:
id,
provider_id
Provider:
id
[{
"id": 25,
"sale": null
},
{
"id": 26,
"sale": {
"id": 15,
"provider_id": 3
}
}]
我希望所有产品都来自某个特定提供商,因此我构建了我的查询:
Product::with(array
('sale'=>function($query){
$query->where('provider_id', '=', 1);
})
)->get();
问题是结果包含正确的销售产品,错误的销售产品为空,如下所示:
Products:
id,
sale_id
Sales:
id,
provider_id
Provider:
id
[{
"id": 25,
"sale": null
},
{
"id": 26,
"sale": {
"id": 15,
"provider_id": 3
}
}]
销售产品:空是来自其他供应商的产品,我可以在内存中过滤它们,但我认为有一种方法可以避免查询结果为空,有什么线索吗?您需要添加关于销售存在的检查何处有('sale')并应用关于特定供应商的条件:
Product::whereHas('sale', function($query) {
$query->where('provider_id', '=', 1); }
)->get();
你打算怎么办呢?销售产品:空是来自其他供应商的产品。我试图只退回特定供应商的产品,我根本不想要来自其他供应商的产品(无论是否销售:空)。Adiaz的第二条评论解决了我的问题。这里的结果相同,我认为“has(sale)”是检查产品是否有销售,而不是检查销售是否是具有提供商id的产品。如果我的提供商id是通过输入给出的(可以是多个或单个,我该如何做?您能帮助吗?使用where方法并将输入映射到数组$query->where('provider_id',(array)$inputArrayOrSingle);sry,你能看看这个问题吗?