Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带闭包的laravel查询_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

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,你能看看这个问题吗?