Laravel Eloquent Lazy Eager Количество загрузок

Я отлично ищу функцию, например

load('relationship')

но который загружает счет таким же образом

withCount('relationship')

работает для активной загрузки.

Я думаю, что он будет называться loadCount('relationship')

Ответ 1

loadCount() доступен с Laravel 5.8

$post->loadCount('comments');

$post->comments_count;

Docs

Ответ 2

Как и в 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'];

Ответ 3

Это решение отлично работает для меня:

Создайте новое отношение 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;