2017-06-02 24 views
1

當建立一個查詢來找到一個模型多個值,雄辯會是這個樣子:Laravel where查詢中找不到列表值?

return Contact::whereIn('user_name', explode(',', $userNames)

但是,讓我們說,對於userNames['foo', 'bar'];但我只有foo作爲一個有效的用戶名,有沒有辦法將bar(全都找不到)作爲同一查詢的一部分,而無需將結果->get()與請求進行比較?

+0

所以你想過濾掉請求數據中的用戶名列表?請更準確地知道您需要什麼。 – Sandeesh

+0

因此,即使數據庫中不存在此類聯繫人,也需要使用該用戶名的聯繫人對象列表? – Jerodev

+1

我正在和這個英俊的人一起工作在同一個項目上。我們正在尋找一種方法來獲得2個列表 - 一個與匹配和一個用戶名沒有找到。 – Sydgren

回答

0

您可以使用數組差異來刪除選擇區域中的無效值,並且您丟失了->get()以獲取結果;

return Contact::whereIn('user_name', array_diff(explode(',', $userNames, ['bar']))->get() 
+2

我知道....這個問題的答案如何? – jycr753

+0

@ jycr753我錯過了解你的問題,我編輯過。 –

0

這是不可能得到的查詢返回不從給定的條件下存在的用戶名的列表。但你可以做到這一點。

$allUserNames = explode(',', $userNames); 

$validUserNames = Contact::whereIn('user_name', $allUserNames) 
    ->pluck('user_name') 
    ->toArray(); 

$invalidUserNames = array_values(array_diff($allUserNames, $validUserNames)); 
+0

是的,這是我害怕的,因爲我沒有在源代碼中找到任何有用的東西,問題在於,當結果真的很大時,它是壞的,因爲收集對於處理大量數據非常不利 – jycr753

+0

你不必使用集合。選擇「user_name」列並將查詢結果轉換爲數組。我只是用pluck展示了這個例子。 – Sandeesh

+0

是的,但我想我需要找到一個更好的方式來處理這個集合,因爲查詢結果將是數百萬,並且它不是最優也不是快速的以這種方式運行。 – jycr753