簡體   English   中英

使用where子句在laravel中按數組創建搜索

[英]Creating search by array in laravel using where clause

我創建了一個控制器,該控制器使用sql查詢來搜索包含三種成分的雞肉,洋蔥和大蒜的食譜。 控制器是:

public function searchingbying(request $request){

         $dataSet = [];
        foreach ($request['ing'] as $ing) {
            $dataSet[] = [
                $ing,   
            ];
        }

    $result= DB::select(DB::raw('select recipe_list.recipe_id, recipe_list.Recipe_name, count(*) as ing_count,  count(ing_list.ing_id) as ing_match_count  from recipe_inglist ri inner join  (select Ing_id from ing_list where Ing_list.Ing_name="Chicken" or ing_list.Ing_name="onion" or ing_list.Ing_name="Garlic" )  ing_list on ri.ing_id = ing_list.ing_id right outer join recipe_list on recipe_list.recipe_id = ri.Recipe_id  group by recipe_list.recipe_id, recipe_list.Recipe_name having ing_match_count = ing_count'));
      }

上面的查詢給出了輸出:

resultstable

問題是我想允許用戶從復選框中選擇所需數量的配料,並且可以從$ request接收這些復選框的值。 但是我該怎么做才能使sql部分:

 where Ing_list.Ing_name="Chicken" or ing_list.Ing_name="onion" or ing_list.Ing_name="Garlic"

一直循環,直到從復選框接收到的所有成分都插入查詢中為止。 就像用戶選擇洋蔥大蒜,番茄和奶酪一樣,查詢的“位置”部分必須為:

where Ing_list.Ing_name="onion" or ing_list.Ing_name="garlic" or ing_list.Ing_name="tomato" or ing_list.Ing_name="cheese"

當選擇洋蔥和大蒜這兩個項目時,$ data的轉儲數據給出:

array(2) { [0]=> array(1) { [0]=> string(5) "onion" } [1]=> array(1) { [0]=> string(6) "Garlic" } } 

使用SQL的IN()

where Ing_list.Ing_name in('" . implode("','", $data) . "')

注意:這種查詢構建容易受到SQL注入的攻擊。 您可以通過將第二個參數用作綁定數組( docs )在Laravels數據庫系統中使用PDO 此外,您可以使用Eloquent,因為這是與數據庫進行通信的更便捷的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM