2017-01-29 3 views
1

Мне нужно знать, имеет ли таблица более 50 строк, соответствующих некоторым критериям. Таким образом, исходный запрос должен выглядеть следующим образом:Laravel Eloquent Query - ограничение на число()

SELECT COUNT(id) FROM (SELECT id FROM table WHERE {conditions} LIMIT 50)

, но у меня возникают проблемы, делая это через красноречива. Это то, что я пытался до сих пор ....

card::where(...)->limit(50)->count("id");

... но это не работает. Он не делает подзапрос для ограничения, поэтому предел становится бесполезным.

Без выполнения подзапроса, который ограничен, запрос занимает до 10 раз дольше ..... Я боюсь, что он не будет столь масштабируемым, как мне нужно.

+0

Смотрите здесь: http://stackoverflow.com/questions/15229303/is-there-a-way-to- limit-the-result-with-eloquent-orm-of-laravel –

ответ

1

Если вы просто хотите, чтобы подсчитать количество столбцов, используйте count() без аргументов:

$numberOfRows = Card::where(....)->take(50)->count(); 
+0

К сожалению, кажется, что 'take (50)' имеет * тот же эффект *, что и 'limit (50)', когда он связан с 'count()'. Запрос, показанный журналами, на самом деле не изменяется вообще: P (запрос по-прежнему 'select count (*) как совокупность из таблицы, где ... limit 50' вместо использования подзапроса) –

+1

@ Вот как хорошо и Query Builder делает это. Вам нужно использовать необработанные запросы, если это вам не подходит. –