2016-09-10 27 views
1

私は配列$shop_idsを持っていますので、これらのIDをループしてSQL文のサブクエリに追加したいと思います。 SQLサブクエリの数は、IDの数と等しくなければなりません。@foreachをLaravelのSQL raw文に追加するには

私はこのようなクエリを期待するが、明らかに@foreachは動作しませんし、ちょうどSQLクエリの一部となり:あなたは一例として、この方法を行うことができます

DB::select('select 
     pr.product_name, 
     pr.brand, 
     coalesce(pr.weight, pr.volume) wv, 
     sli.quantity 
     {{@foreach ($shop_ids as $id) 
       ,{{(select 
     p.price 

     from prices p 
      inner join (
       select p1.product_id id, max(p1.created_at) maxed_date 

       from prices p1 

       group by p1.product_id, p1.shop_id) grouped on grouped.maxed_date=p.created_at 

     join shop_names s on s.id=p.shop_id 
     where p.product_id=sli.product_id 
     and s.id=$id)}}}} 

     from shopping_list_items sli 
     join products pr on pr.id=sli.product_id 

     where sli.shopping_list_id= :slid 

     order by 5 asc', ['slid'=>$this->id]) 
+0

作成ループ内の文字列、それに応じて連結します。 –

+0

例を挙げてください。あなたが意味することを理解していない。ありがとうございました! –

+0

なぜこのようなサブクエリを内部に入れたいのですが、どのような結果を得たいのですか? – jaro1989

答えて

2

-

$ids_query = ''; 
// generate the queries in loop 
foreach ($shop_ids as $id) { 
    $ids_query .= ", (select ..... where .. and s.id=$id)"; 
} 
// use in the main query 
DB::select("select 
     ..., 
     sli.quantity 
     $ids_query 
     from shopping_list_items sli 
     ... 
     order by 5 asc", ['slid'=>$this->id]); 
関連する問題