如何在Laravel中将两列组合的条件查询写入单个查询?

我有三个表products,product_meta_keysproduct_meta_values。产品表存储产品的一般信息,如nameproduct_meta_keys存储产品的动态特性/规格密钥,如product brand,而product_meta_values表存储给定产品和给定meta_key的相应值。下面是样本表结构:如何在Laravel中将两列组合的条件查询写入单个查询?

产品表

产品META键的表

产品meta值表

在此表中,product_idmeta_key_id是来自productproduct_meta_key表的外键。现在

,我要的是,查询到product_meta_values表中找到使用带有两个列(meta_key_idmeta_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

回到顶部