2017-03-17 6 views
3

コレクションがあるコラムを注文する必要があります。Laravel:orderByコレクションのあるコラム

私はorderBy(updated_at, 'desc')に、現在ログインしているユーザーが所有するすべての投稿が必要です。

は、ここに私のコードです:

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

ここでは、Userモデルである:

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

また、並べ替えしないすべてのエラーを返しません!

ご協力いただければ幸いです。

P.S:

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

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

しかし、私は、コレクションと同じことをしたいと思います。次に、あなたのUserモデルに

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

を以下を追加

+1

は '使用してみてください - > sortByDesc - 'の代わりに 'の>最新の() ( 'updated_at'); 'それと同じもの – Onix

+0

'メソッド最新は存在しません。 ' –

+0

'Illuminate \ Database \ Query \ Builder'を使用する必要があります – Onix

答えて

2

posts_sortedByDescを呼び出すことで記事を取得する方法あなたの並べ替えSQLでこれがある:

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

そして、コレクション付き:

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

私は2番目をテストしました。

0

てみ代わりにposts

1

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

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

それは、DataTableのオプションに次の行を追加する必要:

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

だから、これは正常に動作している:

$posts = auth()->user()->posts->sortByDesc('updated_at'); 
関連する問題