首頁  >  問答  >  主體

php - laravel如何拼接多個模糊條件查詢?

假如現在我接收到前端傳來的表單數組:
$input = $request->input();
裡麵包含4個值:email,姓名,年齡,性別.現在需要根據用戶輸入的值進行數據表的查詢,如果用戶輸入了email和姓名,則進行模糊查詢,如果輸入了年齡和性別,則進行準確查詢.
可是問題來了,這4個input,用戶可能填寫一個,也可能填寫4個,那我使用查詢建構器的時候,不可能判斷每個值是否存在,然後寫構造器吧,畢竟模糊查詢跟準確查詢的寫法不同,而且比如現在我有兩個字段(email和姓名)是需要模糊查詢的,laravel進行模糊查詢的構造器是這樣寫的:
->where('email', 'LIKE', $input['email'])
那我必須在程式中判斷email和姓名是否存在的情況,然後來拼接查詢建構器嗎?
這個想法是:

1.email存在,姓名不存在
->where('email', 'LIKE', $input['email'])
2.email不存在,姓名存在
->where('name', 'LIKE', $input['name'])
3.都存在
->where('email', 'LIKE', $input['email'])->->where('name', 'LIKE', $input['name'])

這些的程式碼量也太大了,如果我有十個字段模糊查詢,那根本無法使用構造器了.
請問大家是不是有一種其他的方式,比如:

if($input['email']) $where['email'] = $input['email']
if($input['name'])  $where['name']  = $input['name']

然後使用:
->where( 'LIKE', $where),這樣我一行就包括了所有可能存在也可能不存在的情況,
網上推薦過其他寫法:
$where['email'] = [ 'like', $input['email']],但是我的laravel5.1並不能用.
請問大家有什麼好的方法解決多條件模糊查詢和非模糊查詢嗎?

ringa_leeringa_lee2736 天前1696

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-05-16 12:04:58

    Laravel是可以在where中傳匿名函數的。

    你可以在這個匿名函數裡判斷。

    像這樣

    where(function ($query) use ($request) {
        $request->input('email') && $query->where('email', $request->input('email'));
        $request->input('name') && $query->where('name', $request->input('name'));
    })

    這樣你可以在不破壞構造器結構的情況下進行應有的判斷。

    回覆
    0
  • 某草草

    某草草2017-05-16 12:04:58

    沒有用過5.1,不過5.4有個when方法,例:

    $query->when($name, function($query) use ($name){
        $query->where('name', 'like', '%' . $name . '%');
    });

    意思就是當$name不為空的時候,才執行後面的function

    你查一下5.1有沒有類似方法吧

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-16 12:04:58

    話說查詢建構器的where()方法是返回$this的 -- 所以可以連著寫,但是也並沒有說你必須要連著寫呀!

    字段比較多的時候寫個for循環比較OK了嗎:

    
    $query = XXXModel::query();
    
    for ($field in ['name', 'email', "... 你相加什么字段加什么字段"]){
        if ($fieldValue = $request->input($field)){
            $query->where($field, 'LIKE', "%$fieldValue%");
        }
    }
    
    // 继续添加where条件,或者查询数据...
    

    回覆
    0
  • 高洛峰

    高洛峰2017-05-16 12:04:58

    雷雷

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-16 12:04:58

    肯定是要做判斷的,不管是你做判斷還是框架做判斷。如果有10個欄位去做模糊查詢,那你的mysql吃消失嗎,直接改用搜尋引擎了

    回覆
    0
  • 取消回覆