Я пытаюсь получить уникальные строки из базы данных 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(); 
Я лучше поеду с последним.