Автор оригинала: David Wong.
Статья была переслана из профессионального сообщества разработчиков laravel. Оригинальная ссылка: https://learnku.com/laravel/t…
У красноречивого есть малоизвестная функция с Count() : она может помочь получить количество записей, связанных с объектами, включая удаленные отношения “один ко многим”. Давайте рассмотрим пример.
В нашем примере небольшого проекта у нас есть три модели: Пользователь , Сообщение И Комментарий 。 Все взаимосвязи могут быть описаны этими тремя моделями. Сначала давайте рассмотрим приложение/Пользователя. php Модель:
public function posts()
{
return $this->hasMany(Post::class);
}
public function comments()
{
return $this->hasManyThrough(Comment::class, Post::class);
}
Теперь давайте попробуем отобразить на странице следующую таблицу – статистический список пользователей, их статей и комментариев:
Реализация очень проста. Вот контроллер UserController Код:
public function index()
{
$users = User::withCount(['posts', 'comments'])->get();
return view('users', compact('users'));
}Перейти в с помощью функции Count() Каждый параметр метода в конечном итоге создаст имя параметра в экземпляре модели, чтобы добавить _count Свойство суффикса. Итак, в приведенном выше примере вы можете получить доступ к свойству $user – > сообщения \ количество * * и * * $user – > комментарии \ количество , чтобы получить статистику.
Затем, в нашем файле представления, мы имеем:
| User | Posts | Comments |
|---|---|---|
| {{ $user->name }} | {{ $user->posts_count }} | {{ $user->comments_count }} |
Внимание, с графом() И то, и другое может быть обработано имеет много () Отношения также могут быть обработаны hasManyThrough()
Мало того, мы даже можем использовать с Count() Задает критерии фильтрации для связанной модели. Предположим, у нас есть список комментариев( комментарии ), включающий поле статус аудита( одобрено ). В следующем примере показано, как отфильтровать это поле или даже указать псевдоним:
$users = User::withCount([
'posts',
'comments',
'comments as approved_comments_count' => function ($query) {
$query->where('approved', 1);
}])
->get();Таким образом, он может быть использован при попытке $user->approved_comments_count Чтобы показать статистику.
Если вы хотите узнать больше о withCount() Информация о методе – см. Официальную документацию laravel.