Laravel или PHP уникальные с несколькими условиями

Я пытаюсь получить уникальные строки из базы данных MySQL из PHP и Laravel.

В моей БД я:

Email Errors Status a@aa error1 pending a@aa error2 pending b@bb error1 pending b@bb error1 pending 

В моей голове было бы решение:

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

Но это возвращает:

 Email Errors Status a@aa error1 pending b@bb error1 pending 

И если я попробую:

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

Это еще хуже:

 Email Errors Status a@aa error1 pending 

Мое идеальное решение было бы таким, поэтому я могу видеть разные ошибки от каждого пользователя:

 Email Errors Status a@aa error1 pending a@aa error2 pending b@bb error1 pending 

Это означает уникальность, основанную на нескольких столбцах.

Я искал везде без успеха, надеюсь кто-то может помочь 🙂

Ты можешь…

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(); 

Я лучше поеду с последним.