2017-07-15 65 views
0

我在'用戶'和'媒體'表之間有一個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)

謝謝!

+0

如何/爲什麼不工作?即您是否收到錯誤?你沒有得到任何結果?你得到的結果,但不是你所期望的? –

+0

以下是我在原始文章中寫入的$ 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') –

回答

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); 

希望這有助於!

+0

它的工作原理!非常感謝! –