Ответ 1
loadCount()
доступен с Laravel 5.8
$post->loadCount('comments');
$post->comments_count;
Я отлично ищу функцию, например
load('relationship')
но который загружает счет таким же образом
withCount('relationship')
работает для активной загрузки.
Я думаю, что он будет называться loadCount('relationship')
loadCount()
доступен с Laravel 5.8
$post->loadCount('comments');
$post->comments_count;
Как и в Laravel 5.2, эта функциональность встроена.
Если у вас есть отношения hasMany между Post и Comment, do:
<?php
$posts = App\Post::withCount('comments')->get();
foreach ($posts as $post) {
echo $post->comments_count;
}
По умолчанию вы можете даже рассчитывать отношения нагрузки, объявляя это в своей модели:
<?php
// Post model
protected $withCount = ['comments'];
Это решение отлично работает для меня:
Создайте новое отношение hasOne для соответствующей модели и добавьте необработанный выбор в запрос для подсчета. Например, если вы хотите загрузить количество задач для данного пользователя, добавьте это в модель пользователя:
public function taskCount()
{
return $this->hasOne('App\Task')
->selectRaw('user_id, count(*) as count)
->groupBy('user_id');
}
И затем с нетерпением загружайте счетчик следующим образом:
$user = User::where('email', $email)->with('taskCount)->first();
И получите доступ к счету следующим образом:
$taskCount = $user->task_count->count;