Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 25.10.2022 18:19:46

Возможно ли в один запрос...?

Помогите пожалуйста, как правильнее чз Query Builder/Eloquent выбрать все записи пользователей со значением false в колонке bool если они в данной таблице не когда не были со значением true (хоть до, хоть после).
Не понимаю как еще более точно описать...
Ниже в примере user_id = 2 c записю id = 2 вывестить не должно, потому как далее есть запись user_id = 2 со значением true.
Соответственно user_id = 3 c записю id = 7 тоже не должнв быть выведена.

id  id_user   bool
0   1         false
1   1         false
2   2         false 
3   2         true
4   1         false
5   3         true
6   4         false
7   3         false

На ум приходит только действие в 2 запроса. Сначала собрать всех в массив, кто хотябы раз встретился со значением true. Далее пробежаться по всем записям с выборкой whereNotIn, данным массивом и where bool === false.

Изменено sShpion (25.10.2022 18:24:37)

Не в сети

#2 27.10.2022 20:47:40

Re: Возможно ли в один запрос...?

Во-первых, стандартный SQL не приспособлен для запросов типа "далее есть записи с...". Но можно переосмыслить задачу и добиться нужного результата.

Например так: выбрать всех пользователей, у которых не встречалось значение true (через группировку по пользователю). Для таких пользователей вывести все их записи.

Это можно реализовать через джойн или через where in подзапрос. В любом случае, начинать лучше с сочинения запроса на настоящем SQL, проверить его на правдоподобных данных и только потом выразить в виде Eloquent Query Builder.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 27.10.2022 20:49:48

Re: Возможно ли в один запрос...?

Сделай заготовку с данными на https://www.db-fiddle.com/ пожалуйста. Ты упростишь работу тем, кто захочет помочь. Не заставляй нас тратить слишком много времени.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела