Php 获取具有选项的产品

Php 获取具有选项的产品,php,mysql,join,Php,Mysql,Join,我有一个查询,现在我需要得到所有有一些过滤器选项的产品。使用Laravel,您可以使用Where,仅获取具有过滤器选项的产品。如何使用“原始”查询实现这一点 雄辩的建设者: $db = app( 'db' ) ->table( 'products' ) ->join( 'product_category', 'product_category.product_id', '=', 'products.id' ) ->righ

我有一个查询,现在我需要得到所有有一些过滤器选项的产品。使用Laravel,您可以使用Where,仅获取具有过滤器选项的产品。如何使用“原始”查询实现这一点

雄辩的建设者:

    $db = app( 'db' )
        ->table( 'products' )
        ->join( 'product_category', 'product_category.product_id', '=', 'products.id' )
        ->rightJoin( 'categories', 'categories.id', 'product_category.category_id' )
        ->leftJoin( 'brands', 'brands.id', '=', 'products.brand_id' )
        ->leftJoin( 'variants', 'variants.product_id', '=', 'products.id' )
        ->leftJoin( 'product_contents', 'product_contents.product_id', '=', 'products.id' )
        ->leftJoin( 'translations_languages', 'translations_languages.id', '=', 'product_contents' . '.language_id' )
        ->leftJoin( 'filter_option_product', 'filter_option_product.product_id', '=', 'products.id' )
        ->where( 'categories.id', '3396326' )
        ->where( 'variants.is_default', true )
        ->where( 'translations_languages.title_short_two', 'nl' )
        ->where( 'filter_option_product.option_id', 177 )
        ->whereIn( 'products.id', [ 31025567, 36117839, 36259742, 36260666 ] )
->get();
原始查询:

SELECT
    *
FROM
    `products`
INNER JOIN `product_category` ON `product_category`.`product_id` = `products`.`id`
RIGHT JOIN `categories` ON `categories`.`id` = `product_category`.`category_id`
LEFT JOIN `brands` ON `brands`.`id` = `products`.`brand_id`
LEFT JOIN `variants` ON `variants`.`product_id` = `products`.`id`
LEFT JOIN `product_contents` ON `product_contents`.`product_id` = `products`.`id`
LEFT JOIN `translations_languages` ON `translations_languages`.`id` = `product_contents`.`language_id`
LEFT JOIN `filter_option_product` ON `filter_option_product`.`product_id` = `products`.`id`
WHERE
    `categories`.`id` = 3396326
AND `variants`.`is_default` = true
AND `translations_languages`.`title_short_two` = 'nl'
AND `products`.`id` IN(31025567, 36117839, 36259742, 36260666)
AND (`filter_option_product`.`option_id` = 174 AND `filter_option_product`.`option_id` = 1)
如果您希望任何行在
过滤器选项\u产品
中有一行,则在where子句中,对该表中的一列测试NOTNULL:

SELECT
    *
FROM
    `products`
INNER JOIN `product_category` ON `product_category`.`product_id` = `products`.`id`
RIGHT JOIN `categories` ON `categories`.`id` = `product_category`.`category_id`
LEFT JOIN `brands` ON `brands`.`id` = `products`.`brand_id`
LEFT JOIN `variants` ON `variants`.`product_id` = `products`.`id`
LEFT JOIN `product_contents` ON `product_contents`.`product_id` = `products`.`id`
LEFT JOIN `translations_languages` ON `translations_languages`.`id` = `product_contents`.`language_id`
LEFT JOIN `filter_option_product` ON `filter_option_product`.`product_id` = `products`.`id`
WHERE NOT(`filter_option_product`.`option_id` IS NULL)

产品有多个过滤器
多对多
,因此这对我没有帮助,只需将它们添加到where即可。这只是为了说明如何匹配至少有一个筛选器的所有项。