@ishimitsu
Веб-разработчик

Как получить только уникальные данные из БД в Laravel?

Суть такова есть таблица в БД, есть два важных столбца, это "traiff_id" и "status"
Model::where([
                ['status', '=', 'CLOSED'],
                ['user_id', '=', $user->id]
            ])
            ->get()
            ->groupBy('id')
            ->toArray();


Делаю выборку, с этим все окей. Но суть в том, что мне нужно получить только те строки в которых "status = CLOSED", учитывая тот факт, что таблица может выглядеть так

id     tariff_id           status

1	        1 	        	CLOSED
2	        1		        ACTIVE
3	        2		        CLOSED

И в этом случае мне нужно получить только 3 запись, ибо у первой и второй записи "tariff_id" один и тот же, но у одной из этих записей, статус не CLOSED

Короче, нужно получить только те строки, где при одинаково "tariff_id", status равен CLOSED
  • Вопрос задан
  • 2754 просмотра
Пригласить эксперта
Ответы на вопрос 2
@jazzus
Как вытащить запросом к бд уникальные я не знаю. Скорее всего просто и можно загуглить. В коллекции можно методом unique(). Если Model это типа Payment то в User нужно сделать hasMany отношение
public function payments() {
   return $this->hasMany('App\Models\Payment','user_id', 'id');
}

И сам запрос в контроллере
$status = 'CLOSED';
$payments = $user->payments()
                 ->where('status', $status)
                 ->get()
                 ->unique('tariff_id');
Ответ написан
Комментировать
@NubasLol
select * from name_tables as models1  where not exists((SELECT * FROM name_tables as models2 where models2.tariff_id = models1.tariff_id and models2.status != CLOSED))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы