Laravel框架使用whereIn查詢SQL時數據出錯

Laravel框架使用whereIn查詢SQL時數據出錯

在laravel裏面執行SQL查詢,SQL裏面的 in查詢:

select * from `users` where id in (1,2,3,4,5,6); 

在laravel裏面可以這樣寫:

<?php
DB::table('users')->whereIn('id', [1,2,3,4,5,6])->get()->toArray();

//或者
User::whereIn('id', [1,2,3,4,5,6])->get()->toArray();

這樣寫查詢很方便沒有問題的,也是可以查詢出來的。如果後面再加一個where查詢:

<?php
DB::table('users')->whereIn('id', [1,2,3,4,5,6])
->where('name', 'liyi')
->get()->toArray();

//或者
User::whereIn('id', [1,2,3,4,5,6])
->where('name', 'liyi')
->get()->toArray();

這樣寫的時候也是沒有問題的。現在我們把whereIn的數組改變一下:

<?php
DB::table('users')->whereIn('id', [[2],[12],[2],[3],[4]])
->where('name', 'liyi')
->get()->toArray();

//或者
User::whereIn('id', [[2],[12],[2],[3],[4]])
->where('name', 'liyi')
->get()->toArray();

這個時候,查詢得到的結果還是沒有問題的。還是一個正確的結果,那麼再改變一下呢:

<?php
DB::table('users')->whereIn('id', [[2,1],[12,2],[2],[3],[4]])
->where('name', 'liyi')
->get()->toArray();

//或者
User::whereIn('id', [[2,1],[12,2],[2],[3],[4]])
->where('name', 'liyi')
->get()->toArray();

這個時候它得到的結果就是一個空,why?

實際例子:

<?php
CategoryDetail::whereIn('category_id', [[2,1],[12],[2],[3],[4]])->where('languages_id', 1)->get();

//SQL
select * from `category_details` where `category_id` in (2, 1, 12, 2, 3) and `languages_id` = 4;

所以遇到這個情況的時候,暫時可以的辦法就是

  1. whereIN的查詢放在最後面,這樣就可以保證,它的參數綁定的時候不會把正確的參數替換爲In查詢的參數了

  2. 對自己的In查詢的數組,自己先做一個處理,要麼保證是一個一維數組,這樣肯定沒問題,二位數組的話,保證二位數組裏每個一維數組都是和子元素個數相同,但
    是這樣也不現實,所以呢。。。

發佈了75 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章