2017-10-04 47 views
2

我試圖從PHP和Laravel得到一個MySQL數據庫中的唯一行是唯一的。Laravel或PHP與多個條件

在我的數據庫,我有:

Email Errors Status 
[email protected] error1 pending 
[email protected] error2 pending 
[email protected] error1 pending 
[email protected] error1 pending 

在我腦海中的解決辦法是:

$transactions->unique('email', 'errors', 'status') 

但是,這回這樣的:

Email Errors Status 
[email protected] error1 pending 
[email protected] error1 pending 

如果我嘗試:

$transactions->unique(['email', 'errors', 'status']) 

它甚至更糟:

Email Errors Status 
[email protected] error1 pending 

我的完美的解決方案會是這樣,所以我可以從每個用戶看到不同的錯誤:

Email Errors Status 
[email protected] error1 pending 
[email protected] error2 pending 
[email protected] error1 pending 

基於幾個欄這意味着唯一的。

我到處尋找都沒有成功,我希望有人能幫助:)

+0

'$ transactions'是一個集合嗎? –

+1

看起來好像在數據庫中使用組而不是在PHP中使用它會更好。 –

回答

3

你可以...

1)無論是提供自己的功能unique斷言:

$transactions->unique(function ($item) { 
    return $item['email'].'/'.$item['errors'].'/'.$item['status']; 
}); 

。 ..假設/符號從來沒有在任何領域使用。

2)或作出查詢級別這樣的分組,使用groupBy方法:

$DB::table('transactions')->select('email', 'errors', 'status') 
->groupBy('email') 
->groupBy('errors') 
->groupBy('status') 
->get(); 

我寧願去與後者。

+0

非常感謝,最後一個工作完美。那麼,我有更多的選擇比columnBy列,所以我搞清楚如何做到這一點。我想用一些簡短的concat或類似的東西。 – TrOnNe