Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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 如何在具有雄辩的查询生成器的同一个表的关系上使用whereHas?_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php 如何在具有雄辩的查询生成器的同一个表的关系上使用whereHas?

Php 如何在具有雄辩的查询生成器的同一个表的关系上使用whereHas?,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我正在尝试运行此查询: $products = $this->product_model->where(function($query) use ($key) { $query->whereHas('categories', function ($category) use ($key) { $category->where('key', $key); }); $query->orWhereHas('parent.catego

我正在尝试运行此查询:

$products = $this->product_model->where(function($query) use ($key) {
    $query->whereHas('categories', function ($category) use ($key) {
        $category->where('key', $key);
    });
    $query->orWhereHas('parent.categories', function ($category) use ($key) {
        return $category->where('key', $key);
    });
});
父关系是另一个产品,因此它来自同一个表。我遇到的问题是这样产生的查询:

SELECT *
FROM `products`
WHERE (
    (SELECT count(*)
     FROM `categories`
     INNER JOIN `category_product` ON `categories`.`id` = `category_product`.`category_id`
     WHERE `category_product`.`product_id` = `products`.`id`
     AND `key` = 'mens'
    ) >= 1
 OR
    (SELECT count(*)
     FROM `products` AS `self_30ec5d4782a83841add518f618b9f59e`
     WHERE `self_30ec5d4782a83841add518f618b9f59e`.`id` = `products`.`parent_product_id`
     AND
         (SELECT count(*)
          FROM `categories`
          INNER JOIN `category_product` ON `categories`.`id` = `category_product`.`category_id`
          WHERE `category_product`.`product_id` = `products`.`id`
          AND `key` = 'mens'
         ) >= 1
    ) >= 1
)
在子查询中,或我需要这一行:

WHERE `category_product`.`product_id` = `products`.`id`
为此:

WHERE `category_product`.`product_id` = `self_30ec5d4782a83841add518f618b9f59e`.`id`
在数据库上运行此SQL时,我得到了正确的结果:

SELECT *
FROM `products`
WHERE (
    (SELECT count(*)
     FROM `categories`
     INNER JOIN `category_product` ON `categories`.`id` = `category_product`.`category_id`
     WHERE `category_product`.`product_id` = `products`.`id`
     AND `key` = 'mens'
    ) >= 1
 OR
    (SELECT count(*)
     FROM `products` AS `self_30ec5d4782a83841add518f618b9f59e`
     WHERE `self_30ec5d4782a83841add518f618b9f59e`.`id` = `products`.`parent_product_id`
     AND
         (SELECT count(*)
          FROM `categories`
          INNER JOIN `category_product` ON `categories`.`id` = `category_product`.`category_id`
          WHERE `category_product`.`product_id` = `self_30ec5d4782a83841add518f618b9f59e`.`id`
          AND `key` = 'mens'
         ) >= 1
    ) >= 1
)

但我不知道如何在我的PHP代码中做到这一点。另外,这是预期的SQL输出吗?它不应该做我想让它做的吗?由于子查询位于whereHas?

中,这是Laravel中的一个错误<代码>has()/
whereHas()
无法正确处理自关系或嵌套自关系的条件

我已提交请求以更正此问题。您可以查看它


我不知道它是否会被接受,但您可以查看它以查看更改的代码,并决定是否要自己手动更新Laravel。您也可以关注它,等待结果。

谢谢,我确实开始认为它可能是一个bug,但我自己没有时间(或者可能没有能力!)进一步调查它。