gpt4 book ai didi

php - 如何使用 Eloquent Query Builder 对与同一张表的关系使用 whereHas?

转载 作者:可可西里 更新时间:2023-11-01 08:40:08 27 4
gpt4 key购买 nike

我正在尝试运行此查询:

$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
)

在 OR 之后的子查询中我需要这一行:

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() 无法正确处理 self 关系或嵌套 self 关系的条件。

我已提交拉取请求来更正此问题。可以查看here .

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

关于php - 如何使用 Eloquent Query Builder 对与同一张表的关系使用 whereHas?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34909052/

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