@kirill-93

Как оптимизировать запрос laravel?

Здравствуйте, помогите пожалуйста по максимуму перенести мой запрос на Eloquent.
Сначала запрос был полностью "сырым", сейчас преобразовал его немного, но получилось не очень красиво.
#
        $subscriptions = Subscription::where('user_id', \Auth::user()->id)->lists('entity_id')->toArray();
        $views             = View::where('user_id', \Auth::user()->id)->lists('post_id')->toArray();

        if ($subscriptions) {
            $entityIds = '(' . implode(', ', $subscriptions) . ')';
        }

        if ($views) {
            $ids = '(' . implode(', ', $views) . ')';
        }

        $result = Entity::leftJoin('countries', 'countries.id', '=', 'entities.country_id')
            ->leftJoin('posts', function($join) use ($entityIds, $ids) {
                if ($entityIds) {
                    $join->on('posts.entity_id', 'IN', \DB::raw($entityIds));
                }

                if ($ids) {
                    $join->on('posts.id', 'NOT IN', \DB::raw($ids));
                }
            })
            ->selectRaw('
                entities.id,
                entities.alias,
                entities.type,
                entities.name,
                countries.iso_code_3 AS country,
                count(posts.id) AS unwatched
            ')
            ->get()
            ->toArray();

Вся проблема в том, что изначально у меня был селект в джоине:
LEFT JOIN (
    SELECT ....
) as Q2

В общем мне нужно посчитать количество записей из связанной таблицы.
Как можно упростить то, что у меня получилось?
  • Вопрос задан
  • 260 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы