如何在Laravel中将两列组合的条件查询写入单个查询?
我有三个表products
,product_meta_keys
和product_meta_values
。产品表存储产品的一般信息,如name
和product_meta_keys
存储产品的动态特性/规格密钥,如product brand
,而product_meta_values
表存储给定产品和给定meta_key的相应值。下面是样本表结构:如何在Laravel中将两列组合的条件查询写入单个查询?
产品表
产品META键的表
产品meta值表
在此表中,product_id
和meta_key_id
是来自product
和product_meta_key
表的外键。现在
,我要的是,查询到product_meta_values
表中找到使用带有两个列(meta_key_id
和meta_value
)的组合条件查询作为一个条件的产品ID。
这里是我试图查询(忽略现在加入一部分):
\DB::table('product_meta_values') ->select('product_id as product')
->where(function($query){
$query->where('meta_key_id', 1)
->where('meta_value', 'MValue 1');
})
->where(function($query){
$query->where('meta_key_id', 2)
->where('meta_value', 'MValue 2');
})
->distinct()
->get();
我期望是
+ -------- - + |产品| + --------- + | 1 | + --------- +
但得到空集。任何想法?
在此先感谢。
回答:
SELECT x1.product_id
FROM
(
SELECT
product_id
from
meta_values
where
(
meta_key_id = 1
AND meta_value = 'MValue1'
)
) as x1 ,
(
SELECT
product_id
from
meta_values
where
(
meta_key_id = 2
AND meta_value = 'MValue2'
)
) as x2
where
x1.product_id = x2.product_id
与您查询的问题是使用和与单排多列,什么以及不严格搜索在单行匹配的结果。这有点棘手。尝试使用子查询处理这类问题。
回答:
你应该使用加入了这些类型的问题:
Product:: join('pmv', 'pmv.product_id', '=', $product->id)->
join('mk', 'pmv.meta_value', '=', 'mk.id')->
where(//add conditions here//)->where('key', '=', 'value')->
select('products.name', 'pmv.field1', 'mk.fieldX')->
get();
哪里PMV是product_meta_values和MK是meta_keys。请注意,在查询任何字段之前,您应该添加表的名称,因为您需要告诉查询在哪个表中查找该字段。
以上是 如何在Laravel中将两列组合的条件查询写入单个查询? 的全部内容, 来源链接: utcz.com/qa/261382.html