我和一个'用户之间有一个belongsToMany关系。和媒体'表。
我想在我的视图中按照'喜欢'的顺序显示媒体。总和(=每个媒体的受欢迎程度)与分页。例如,首先显示在用户中接收到最多喜欢的媒体。
我的数据库:
'media' : id, name
'media_user' : id, media_id, user_id, like
'users' id, name
'喜欢不是布尔值但是整数但是整数,它可以是-1等......我想总结它。
我的用户模型中有:
class User extends Authenticatable
{
public function medias()
{
return $this->belongsToMany('App\Media')->withPivot('like')->withTimestamps();
}
...
}
我在另一篇文章中看到过类似的内容,但我无法让它发挥作用......
$medias=Media::leftJoin(
DB::raw('(SELECT media_id, SUM(like) AS likes FROM media_user GROUP BY media_id) as v'),
'v.media_id', '=', 'media.id'
)->orderBy('likes', 'desc')->paginate(20);
以下是我通过上述查询获得的例外
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MariaDB服务器版本相对应的手册,以便使用正确的语法,例如AS喜欢FROM media_user GROUP BY media_id)作为v on v.media_id = medi'在第1行(SQL:select count(*)as media from media` inner join(SELECT media_id,SUM(like)AS like FROM media_user GROUP BY media_id)as v on v.media_id = media.id)
谢谢!
答案 0 :(得分:0)
我想是因为你的列名是like
,这是一个保留的关键词。
https://mariadb.com/kb/en/mariadb/reserved-words/
尝试在反引号中包装like
:
$medias = Media::leftJoin(
DB::raw('(SELECT media_id, SUM(`like`) AS likes FROM media_user GROUP BY media_id) as v'),
'v.media_id', '=', 'media.id'
)->orderBy('likes', 'desc')->paginate(20);
希望这有帮助!