Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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或Where未按预期工作_Php_Laravel 4_Eloquent - Fatal编程技术网

Php Laravel或Where未按预期工作

Php Laravel或Where未按预期工作,php,laravel-4,eloquent,Php,Laravel 4,Eloquent,我试图在具有嵌套关系的Laravel中使用或wherehas方法,但没有得到预期的结果。我是否误解了如何使用这种方法 我的关系建立如下: Product -> hasOne uniqueItem -> hasMany fulfillmentCenterUniqueItems -> hasMany skus -> hasOne uniqueItem -> hasMany fulfillmentCe

我试图在具有嵌套关系的Laravel中使用
或wherehas
方法,但没有得到预期的结果。我是否误解了如何使用这种方法

我的关系建立如下:

Product
    -> hasOne uniqueItem
        -> hasMany fulfillmentCenterUniqueItems
    -> hasMany skus
        -> hasOne uniqueItem
            -> hasMany fulfillmentCenterUniqueItems
我试图通过从数据库中检索包含
uniqueItems
的产品来测试
whereHas
或whereHas
方法,这些产品包含
uniqueItems
uniqueItemFulfillmentCenter
id=7089
或包含
uniqueItem
的产品,具有
uniqueitemfillmentcenter
id=7412

根据我数据库中的数据,此查询的结果应该是两个产品。产品ID 105和239

以下是我正在使用的雄辩代码:

$product = Spire_models\Product
    ::whereHas('uniqueItem.fulfillmentCenterUniqueItems', function ($query)
    {
            $query->where('id', 7089);
    })
    ->orWhereHas('skus.uniqueItem.fulfillmentCenterUniqueItems', function ($query)
    {
            $query->where('id', 7412);
    })
    ->get()->toArray();
出于某种原因,这只是返回产品ID 105,而不是105和239。此函数生成的sql为:

select * from `products` where `products`.`deleted_at` is null and (select count(*) from `unique_items` where `products`.`unique_item_id` = `unique_items`.`id` and (select count(*) from `fulfillment_center_unique_items` where `fulfillment_center_unique_items`.`unique_item_id` = `unique_items`.`id` and `id` = 7089 and `fulfillment_center_unique_items`.`deleted_at` is null) >= 1 and `unique_items`.`deleted_at` is null) >= 1 and (select count(*) from `skus` where `skus`.`product_id` = `products`.`id` and (select count(*) from `unique_items` where `skus`.`unique_item_id` = `unique_items`.`id` or (select count(*) from `fulfillment_center_unique_items` where `fulfillment_center_unique_items`.`unique_item_id` = `unique_items`.`id` and `id` = 7412 and `fulfillment_center_unique_items`.`deleted_at` is null) >= 1 and `unique_items`.`deleted_at` is null) >= 1 and `skus`.`deleted_at` is null) >= 1
此sql是否生成错误,或者我是否误用了
或where has
方法?在我看来,
语句在sql中的位置不正确

如果我删除
或where has
方法,事情会按预期进行。例如,如果我运行以下命令:

$product = Spire_models\Product
    ::whereHas('uniqueItem.fulfillmentCenterUniqueItems', function ($query)
    {
            $query->where('id', 7089);
    })
    ->get()->toArray();
$product = Spire_models\Product
    ::whereHas('skus.uniqueItem.fulfillmentCenterUniqueItems', function ($query)
    {
            $query->where('id', 7412);
    })
    ->get()->toArray();
我正确地得到了产品ID 105。如果我运行这个:

$product = Spire_models\Product
    ::whereHas('uniqueItem.fulfillmentCenterUniqueItems', function ($query)
    {
            $query->where('id', 7089);
    })
    ->get()->toArray();
$product = Spire_models\Product
    ::whereHas('skus.uniqueItem.fulfillmentCenterUniqueItems', function ($query)
    {
            $query->where('id', 7412);
    })
    ->get()->toArray();
我正确地获得了产品ID 239。因此,查询的各个部分工作正常,但当我尝试将它们与
或wherehas
组合时,似乎得到了意外的结果。知道为什么吗

编辑

根据评论,看起来这是一个bug。通过重写代码以使用
where
或where
,我可以暂时解决这个问题。以下是临时解决方案:

$product = Spire_models\Product
    ::where(function ($query)
    {
            $query->whereHas('uniqueItem.fulfillmentCenterUniqueItems', function ($query)
            {
                    $query->where('id', 7089);
            });
    })
    ->orWhere(function ($query)
    {
            $query->whereHas('skus.uniqueItem.fulfillmentCenterUniqueItems', function ($query)
            {
                    $query->where('id', 7412);
            });
    })
    ->get()->toArray();

这是一个bug,现在已经用这个PR修复了


自从版本5.0.21以来,一切正常。是的,这是一个bug。需要修正hanks@JarekTkaczyk。我在这里该怎么办?在Github中报告问题?是的,请报告问题。我已经做了一个修复,只需要调整测试,明天就会发布PR。@JarekTkaczyk这段时间你修复了吗?如果是,请添加一个简短的答案。Thanks@lukasgeiter好了