2017-04-07 7 views
0

私はトピックごとに最後の投稿の作成日からトピックを並べ替えるようにしています。 これを行う方法を知っている人はいますか? 実際には、私が望むものすべてをうまく回復しますが、正しい順序では回復しません。LARAVEL - 関係性のために注文する

1つのトピックには多数のポストがあり、1つのポストは1つのトピックに属します。

*:topic = sujetのコードです。 topics = lesSujets。

$lesSujets = Sujet::where('jeu_id', $idJeu)->paginate(20); 

@foreach ($lesSujets as $sujet) 
     <tr> 

      <td><a href="{{route('sujet.show', $sujet->id)}}">{{$sujet->titre}}</a></td> 
       ... 
     </tr> 

スクリーンショット: forum

私はトピックが最後の返信でソートされたいです。 注文は「最高のカード」、「テスト1」、「aaaaa ..!」、「[Firm] zzzz ..」; トピックの最後の答えは$ sujet-> postes-> last() - > created_at(スクリーンショットの視点から)で知ることができます。

+0

希望:http://stackoverflow.com/a/19885982/6028607 –

答えて

0

eager loadingを使用して、orderBy()の関係を使用することができます。私はあなたのデータベーススキーマ全くわからないんだけど、自分自身を話すフランス人であること、私は試してみて、あなたに一致する例を与え、これを取得する必要がありますが、私たち;-)

$sujets = Sujet::where('jeu_id', $idJeu)->with('poste')->orderBy('post.date', 'desc')->get(); 

を与えたもので意味をなさないよあなたのすべての "sujets"、そしてそれは "ポスト"のいずれかによって注文をenabeling、 "ポスト"の熱心な負荷になります。

EDIT:私が間違っていた、ここでの正しい構文は次のとおりです。

$sujets = Sujet::where('jeu_id', $idJeu)->with(['poste' => function ($query) { 
    $query->orderBy('created_at', 'desc'); 
}])->get(); 

EDIT 2:私は私はあなたがどこ最初で探しているものを誤解だと思う、これはどう?私のコードの関係名を確認して、それが本当にあなたのものに似ているようにしてください。しかし、私の目的のために、いくつかのダミーコードでテストしています。これは助けることができる

$sujets = Sujet::where('jeu_id', $idJeu) 
->with(['poste'])->get() 
->sortByDesc('poste.created_at'); 
+0

Thxを、私はすでにこれを試みるのだが、$ lesSujetsを動作していない= Sujet ::どこ( 'jeu_id'、 $ idJeu) - > with( 'postes') - > orderBy( '​​poste.created_at'、 'desc') - > paginate(20); // SQLSTATE [42S22]:列が見つからない:1054 Champ 'poste.created_at' inconnu dans order節(SQL:select * from 'sujets'から' jeu_id' = 1位は 'poste'によって作成されます.'created_at' desc limit 20 offset 0) – emeliku

+0

@emeliku私の答えを修正しました。私の構文は間違っていました。編集を参照してください。 –

+0

何も変更されていません。私は家にいます – emeliku

関連する問題