Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 14.12.2016 14:08:15

[РЕШЕНИЕ], как посчитать реляции БЕЗ загрузки всех объектов НО с Eager

Лара 5.2+, для Лары ниже надо модифицировать код, но в целом прокатит вся конструкция.

class Post extends Model
{
    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function commentsCountRelation()
    {
        // Используем hasOne, вместо hasMany, потому что надо вернуть одно поле одной строки
        return $this->hasOne( Comment::class )->select( DB::raw('id, count( * ) as count'))->groupBy( 'id' );
    }

    /**
     * Магический метод, который перехватывает обращение к аттрибуту модели и соответственно его обрабатывает в классе-родителе
     * @return integer
     */
    public function getCommentsCountAttribute()
    {
        if ( !is_null( $this->commentsCountRelation->first() ) )
        {
            return $this->commentsCountRelation->first()->count;
        } else return 0;
    }
}

// В итоге механизм использования Eager Loading
$Post = Post::with( 'commentsCountRelation' )->find( $id );
echo $Post->commentsCount;

Инклюженная с ->with() Реляция всегда будет пустая (null). Это нормально.

Ваши комментарии?

Админу: есть смысл делать раздел готовых решений. А то замучали одними и теми же вопросами; отключать нахрен поиск - пусть читают весь форум; Вводить теги к темам и комментариям.

Изменено hzone (14.12.2016 17:46:59)

Не в сети

#2 16.12.2016 10:50:10

Re: [РЕШЕНИЕ], как посчитать реляции БЕЗ загрузки всех объектов НО с Eager

  1. А то замучали одними и теми же вопросами; отключать нахрен поиск — пусть читают весь форум;

Ну да, ага.

Теги уже есть. Пишешь статью, добавляешь тег, вот тебе и раздел. Форум не для статей и не для готовых решений.

Не в сети

#3 16.12.2016 13:16:16

Re: [РЕШЕНИЕ], как посчитать реляции БЕЗ загрузки всех объектов НО с Eager

теги про форум имел ввиду, чтобы искали по имеющимся тегам, а не придумывали чебурашек

Не в сети

Подвал раздела