Красноречивый запрос Laravel с суммой связанной таблицы - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть таблица пользователи и сообщения со столбцами user_id и post_views . В post_views я храню информацию о том, сколько раз пост отображался.

А теперь в запросе я хотел бы получить пользователя с суммой post_views всех его сообщений.

Я пытался сделать что-то вроде этого:

User::where(['id'=>$id])->with('posts')->get();

А в модели я определил:

public function posts()
    {
        return $this->hasMany('App\Models\Post')->sum('post_views','AS','totalViews');
    }

Но безуспешно.

Как это сделать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Вы можете использовать модифицированный withCount():

public function posts()
{
    return $this->hasMany('App\Models\Post');
}

$user = User::withCount(['posts as post_views' => function($query) {
    $query->select(DB::raw('sum(post_views)'));
}])->find($id);
// $user->post_views
0 голосов
/ 08 сентября 2018

Вы можете использовать

User::withCount('posts')->find($id)

, чтобы получить пользователя с идентификатором $id и атрибутом posts_count в ответе

Я не совсем уверен, каково намерение ->sum('game_plays','AS','totalVies'); - вам нужно добавить больше контекста, если вы хотите это

Просто кое-что добавить в отношении вашего показанного кода: нет необходимости запрашивать по идентификатору, используя где +, в конце get () заставит вас запросить коллекцию. Если вы хотите получить один результат, используйте find при поиске по id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...