2016-07-19 6 views
1

Я хочу ограничить количество результатов, заданных запросом Neoelquent, take() работает нормально, но я не знаю, как использовать skip()? Я прочитал laravel 5.2 Do c. Я пытаюсь использовать skip (10) -> take (10), но он говорит: «Пропуск метода не существует». вот мой код:Как использовать skip/take в Vinelab/Neoeloquent запросы: PHP

$artifact=Models\Artifact::where('aid',$request->aid)->first(); 
$comments=$artifact->comments->take(10); 

ответ

0

нормально, я нашел ответ на свой вопрос, так как результирующий набор $ artifact-> комментария является Laravel collection, не существует никакого метода пропуска(). используя другой метод с именем slice() Я мог бы решить проблему и получить желаемое подмножество результата. Теперь у меня есть:

$comments=$artifact->comments->slice($startOffset, $count); 

который отлично работает. Другой метод с именем splice() возвращает аналогичные значения, но, пожалуйста, подумайте, что он изменит исходный набор результатов.

+0

Обратите внимание, что здесь вы выборка комментариев всего артефакта и принимая ряд из них, если вы хотите для запроса, чтобы получить точный номер сразу, вам нужно сделать что-то вроде '$ artifact-> comments() -> take (10) -> skip (5) -> get();' – Mulkave

+0

thanks @Mulkave you ' и это именно то, что я ищу. ваше решение более эффективно, чем мое, особенно когда есть много комментариев к артефакту. Это очень вероятно в приложении, которое я разрабатываю. Вы спасли меня. Еще раз спасибо. – Omid

+0

приятно слушать! Тогда поставит это в качестве ответа. – Mulkave

1

С ответом вы указали, что происходит, что вы будете получать все комментарии, поэтому с большим количеством из них это будет узким местом в производительности, особенно для того, чтобы вам не нужно было всех. Что вы можете сделать, это использовать limit и offset на запросе с методами take и skip соответственно, следующим образом:

$comments = $artifact->comments()->take(10)->skip(5)->get()