web-dev-qa-db-ja.com

Laravel:コレクションを持つ列によるorderBy

コレクションのある列をOrderByする必要があります。

現在ログインしているユーザーが所有するすべての投稿をorderBy(updated_at, 'desc')する必要があります。

ここに私のコードがあります:

$posts = auth()->user()->posts->sortByDesc('updated_at');

ユーザーモデルは次のとおりです。

class User extends Authenticatable
{
    public function posts()
    {
      return $this->hasMany(Post::class);
    }
}

エラーも返さず、ソートもされません!

どんな助けでも大歓迎です。

追伸:

私はこれを達成できることを知っています:

$posts = Post::where('user_id', auth()->user()->id)->orderBy('updated_at', 'desc')->get();

しかし、コレクションでも同じことをしたいと思います。

12
Hamed Kamrava

これが、SQLでのソート方法です。

$posts = auth()->user()->posts()->orderBy('updated_at', 'DESC');

コレクションを使用すると:

$posts = auth()->user()->posts->sortByDesc('updated_at');

2番目のものをテストしましたが、意図したとおりに機能します。

21
DevK

@devkは正しい。最初の投稿で書いたことは正しいです。

問題は、ビューの DataTables にありました。

この行をDatatablesオプションに追加する必要がありました。

"order": [[ 5, 'desc' ]], // 5 is the `updated_at` column (the sixth column in my case)

だからこれはうまく機能しています:

$posts = auth()->user()->posts->sortByDesc('updated_at');
1
Hamed Kamrava

以下をユーザーモデルに追加してみてください

public function posts_sortedByDesc(){
      return $this->hasMany(Post::class)->sortByDesc('updated_at');
   }

次に、postsの代わりにposts_sortedByDescを呼び出して投稿を取得します

0
Jesse de gans