2017-05-22 14 views
0

私は、関係を介して取得されたレコードのコレクションを持っており、created_atフィールドでレコードを注文したいと思います。 Eloquentでこれは可能ですか?ここでEloquentコレクションを並べ替えるには?

は私がコレクションを取得しています方法です:

$skills = $employee->skills;

私は彼らの創造により、この$skillsコレクションを注文したいと思います。私は$skills->orderBy('created_at', 'desc');を試しましたが、コレクションクラスにはorderByメソッドがありません。

私はこの問題は非常に簡単だと思いますし、私は何かが欠けています。..

答えて

0

これが失敗している理由は、orderByは、クエリメソッドではない回収方法であるということです。

$skills = $employee->skills()->orderBy('created_at', 'desc')->get();を使用した場合は、必要な順番でスキルを問い合わせます。

また、既に注文したいコレクションがある場合は、sortByまたはsortByDescの方法を使用できます。

0

あなたが代わりに関係のクエリにorderBy制約を追加する必要があります。

例えば、

$employees = Employee::where('salary', '>', '50000') // just an example 
         ->with('skills') // eager loading the relationship 
         ->orderBy('created_at', 'desc') 
         ->get(); 

してからの場合:

foreach($employees as $employee) 
{ 
    var_dump($employee->skill); 
} 
0

あなたはフィールドで注文することが常にに結果が必要な場合は、関係のことを指定することができます:あなたはちょうどそれらを注文したい場合は

Employee.php

public function skills() { 
    return $this->hasMany(Skills::class)->orderBy('created_at'); 
} 

場合によってはorderBy()を使用できますが、その関係ではなく、プロパティではありません:

$skills = $employee->skills()->orderBy('created_at')->get(); 
0

コレクションは、次の2つの方法でこれを行うことができますsortBysortByDesc

$skills = $skills->sortBy('created_at'); 
$skills = $skills->sortByDesc('created_at'); 
3

を持っています。

$employee->skills()->orderBy('created_at', 'desc')->get(); 

OR

にあなたがあなたのcollection

sortBysortByDescを使用することができるよう、あなたは、クエリの間、あなたの結果を orderByしますか
関連する問題