165 votes

Comment faire dans Laravel, subquery où dans

Comment puis-je faire cette requête dans Laravel :

SELECT 
    `p`.`id`,
    `p`.`name`, 
    `p`.`img`, 
    `p`.`safe_name`, 
    `p`.`sku`, 
    `p`.`productstatusid` 
FROM `products` p 
WHERE `p`.`id` IN (
    SELECT 
        `product_id` 
    FROM `product_category`
    WHERE `category_id` IN ('223', '15')
)
AND `p`.`active`=1

Je pourrais aussi le faire avec une jointure, mais j'ai besoin de ce format pour des raisons de performance.

5voto

Aditya Singh Points 406

Le code suivant a fonctionné pour moi :

$result=DB::table('tablename')
->whereIn('columnName',function ($query) {
                $query->select('columnName2')->from('tableName2')
                ->Where('columnCondition','=','valueRequired');

            })
->get();

5voto

Darkproduct Points 102

Voici mon approche pour Laravel 8.x recueillies à partir de plusieurs réponses ici :

  • Utilisez le générateur de requêtes et n'écrivez pas directement le langage SQL.
  • Utilisez les modèles et déterminez tout à partir de là. N'utilisez pas un nom de table codé en dur, ni aucun nom (colonnes, etc.) d'ailleurs.

    Product::select(['id', 'name', 'img', 'safe_name', 'sku', 'productstatusid']) ->whereIn('id', ProductCategory::select(['product_id']) ->whereIn('category_id', ['223', '15']) ) ->where('active', 1) ->get();

1voto

LC Yoong Points 598

Laravel 4.2 et au-delà, peut utiliser l'interrogation de la relation try:-

Products::whereHas('product_category', function($query) {
$query->whereIn('category_id', ['223', '15']);
});

public function product_category() {
return $this->hasMany('product_category', 'product_id');
}

1voto

panqingqiang Points 139
Product::from('products as p')
->join('product_category as pc','p.id','=','pc.product_id')
->select('p.*')
->where('p.active',1)
->whereIn('pc.category_id', ['223', '15'])
->get();

-1voto

a3rxander Points 402

En utilisant une variable

$array_IN=Dev_Table::where('id',1)->select('tabl2_id')->get();
$sel_table2=Dev_Table2::WhereIn('id',$array_IN)->get();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X