Получение общего числа строк в Laravel Eloquent

Eloquent – это объектно-реляционный преобразователь (ORM), который включен в структуру Laravel по умолчанию. В этой серии статей вы узнаете, как делать запросы к базе данных и как работать с отношениями в Laravel Eloquent. Также вы сможете попрактиковаться на примерах: мы попробуем улучшить демо-приложение с помощью новых моделей и отношений.

Примечание: Все мануалы данной серии можно найти по тегу Laravel Eloquent.

При работе с результатами запроса к базе данных часто возникает необходимость получить только общее количество строк (вместо того, чтобы извлекать полный набор данных с помощью обычного запроса). Eloquent предлагает несколько различных агрегатных методов, которые вместо объекта возвращают скалярное число, среди них count(), max() и sum(). Все эти методы доступны в конструкторе запросов, встроенный в каждую модель Eloquent.

В этой части серии мы обновим основной вид приложения, чтобы отобразить общее количество ссылок в каждом списке.

Откройте файл resources/views/index.php в редакторе кода:

resources/views/index.php

Найдите абзац, стилизованный под класс subtitle, который содержит цикл foreach, отображающий меню приложения:

...
<p class="subtitle">
     @foreach ($lists as $list)<a href="{{ route('link-list', $list->slug) }}" title="{{ $list->title }}" class="tag is-info is-light">{{ $list->title }}</a> @endforeach
</p>
...

Чтобы получить общее количество ссылок в каждом списке, вы можете получить доступ к конструктору запросов из метода $list->links(), определенного в классе LinkList, и вызвать метод count(), доступный через этот конструктор запросов:

{{ $list->links()->count() }}

Обновите код внутри цикла foreach и включите в него вызов метода count(), который отобразит количество ссылок в списке. Обязательно поместите его внутри тега <a> сразу после заголовка списка. Для большей читабельности в отображаемом HTML-выводе вы можете заключить эти данные в круглые скобки.

Вот как должен выглядеть код после того, как вы внесете все изменения:

<p class="subtitle">
     @foreach ($lists as $list)<a href="{{ route('link-list', $list->slug) }}" title="{{ $list->title }}" class="tag is-info is-light">{{ $list->title }} ({{ $list->links()->count() }})</a> @endforeach
</p>

Когда закончите, сохраните файл. Затем перезагрузите главную страницу приложения в своем браузере. Напоминаем, она доступна по ссылке:

http://localhost:8000

Теперь в верхнем меню на вашей странице будет указано общее количество ссылок, включенных в каждый список.

В следующем мануале этой серии вы узнаете, как ограничить количество результатов в запросе и как разбить результаты на страницы в Laravel Eloquent.

Tags: , , ,

Добавить комментарий