我在'用戶'和'媒體'表之間有一個belongsToMany關係。Laravel,根據相關型號排列SUM
我想在我的視圖中按照'like'sum(=每種媒體的流行度)和分頁顯示媒體。例如,首先顯示在用戶中獲得最多喜好的媒體。
我的DB:
'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服務器版本相對應的手冊,以便在第1行附近使用as like as FROM media_user GROUP BY media_id)作爲v on v.media_id = medi'(SQL:select count(*)as aggregate 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)
謝謝!
如何/爲什麼不工作?即您是否收到錯誤?你沒有得到任何結果?你得到的結果,但不是你所期望的? –
以下是我在原始文章中寫入的$ medias = Media :: leftJoin時得到的異常: SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法有錯誤;檢查與你的MariaDB服務器版本相對應的手冊,以便在第1行的'v'.mediamedia'='medi'附近使用as like as AS like FROM media_user GROUP BY media_id)使用正確的語法(SQL:select count (*)作爲來自'media'內部連接的聚合(SELECT media_id,SUM(like)AS like media_user GROUP BY media_id)作爲v on'v'.media_id' ='media'.'id') –