Привет, я хочу получать самые популярные сообщения, я создал систему, в которой вы можете голосовать за сообщение или комментарий. [+1, -1]
Голосовая таблица
integer: id - vote id
integer: model_id - идентификатор модели
string: model -model name ["App/Post", "App/Comment"]
целое число: значение - значение для голосования [-1, 1]
Теперь я хочу получить сообщения, упорядоченные по сумме стоимости. Но я застрял в тупике. Вот мой фактический код, к сожалению, не работает.
DB::table('posts')
->join('votes','posts.id','votes.model_id')
->groupBy('votes.model_id')
->where('model','App\Post')
->select('posts.*','sum(\'votes.value\')')
->get();
Пожалуйста, полностью прочитайте руководство по построению запросов Laravel.
Вам нужно использовать необработанное выражение, поскольку оно имеет агрегатную функцию.
DB::table('posts')
->join('votes','posts.id','=','votes.model_id')
->groupBy('votes.model_id')
->where('model','App\Post')
->selectRaw('posts.*, sum(votes.value) as sum_value')
->get();