запрос с множественным соединением / exist на том же отношении с другим предложением where

вот мой стол

Введите описание изображения здесь
я хочуproduct_id, чтобы иметь оба эти условия

 `f_id` = '4' and `value` in ('10', '11', '12', '13' )

и

 `f_id` = '10' and `value` in ('34')

который был бы product_id : 11
вот мой запрос

$products = Product::whereHas('ProductFilter' , function($q) use ($filter_groups){

        foreach($filter_groups as $k=>$v)
        $q->where('f_id' , $k )->whereIn( 'value' ,$v );

    })->get();

что приведет к этому запросу

select * from `products` where exists 

( 
  select * from `product_filters` where 
 `product_filters`.`product_id` = `products`.`id` and 
 `f_id` = '4' and `value` in ('10', '11', '12', '13' )   and 
 `f_id` = '10' and `value` in ('34')

)

но нет никаких отношений между f_idИ valueИ это не вернет никакого результата

в основном, что я хочу, это этот запрос

select * from `products` where exists 

( 
  select * from `product_filters` where 
 `product_filters`.`product_id` = `products`.`id` and 
 `f_id` = '4' and `value` in ('10', '11', '12', '13' )  

)
and exists 
( 
  select * from `product_filters` where 
 `product_filters`.`product_id` = `products`.`id` and 
 `f_id` = '10' and `value` in ('34')

)

2 ответа

  1. необходимо записать другое условие в качестве подзапроса

    select * from `products` where exists 
    
    ( 
      select * from `product_filters` where 
     `product_filters`.`product_id` = `products`.`id` and 
      (`f_id` = '4' and `value` in ('10', '11', '12', '13' ) ) and  `product_filters`.`product_id` in (select product_id from product_filters where `f_id` = '10' and `value` in ('34') )    
    )
    
  2. $query = Product::where([]);
    foreach($filter_groups as $k=>$v)
    $query->whereHas('ProductFilter' , function($q) use ($k , $v ){
            $q->where('f_id' , $k )->whereIn( 'value' ,$v );
        })
    
    $products = $query->get();