2017-07-15 15 views
0

私は 'users'と 'media'テーブルの間にbelongsToMany関係を持っています。Laravel、関連モデルによる注文SUM

私は、メディアの「好き」の合計(=各メディアの人気)とページ付けの順にメディアを表示したいと考えています。例えば、ユーザの中で最も多くの好き嫌いを受けたメディアが最初に表示される。

マイDB:

'media' : id, name 
    'media_user' : id, media_id, user_id, like 
    'users' id, name 

「ブールが、整数が、整数ではないように、それができる-1等...私はそれを合計します。私は私のUserモデルを持っている

:私は別のポストにこのようなものを見てきましたが、私はそれを動作させることができない

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が好きだからmedia_user GROUP BY media_id)v.media_id = medi 'on line 1(SQL:select count(*)as aggregateメディア内の結合から(SELECT media_id、SUM(like)ASはFROM media_user GROUP BY media_idを好きです。)v:media.id = media.id)

ありがとうございました!

+0

どのように動作していませんか?つまりエラーが発生していますか?結果は得られていませんか?あなたは結果を得ていますが、期待した結果は得られていませんか? –

+0

以下は、元の投稿に書いた$ medias = Media :: leftJoinの例外です。 SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックして、正しい構文が近くにあるようにしてください)ASが好きだからmedia_user GROUP BY media_id)v 'v'.media_id' = medi' on line 1(SQL:select count 'media''、' media'.id'から 'media'id、SUM(like)ASがFROM media_user GROUP BY media_idを' 'v'.media_id' =' media'.id'のように '' media''内部結合から集約したものです) –

答えて

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

それは動作します!どうもありがとうございます! –

関連する問題