2016-05-06 8 views
1

まず2つの異なるクエリを作成します。タイムスタンプを含むオブジェクトの値に基づいて配列を並べ替え

$first = first::where('id',$request->first_id)->select('name','created_at')->get(); 
$second = second::where('id', $request->second_id)->select('name','created_at')->get(); 

次に、2つの結果の配列をマージします。

$data_combine = array_merge($first->toArray(), $second->toArray()); 

最後に、私は「午後4時43分46秒2016年5月6日」例えば、そのcreated_at値に基づいて昇順に組み合わせた配列をソートしたいと思います。

答えて

1
$array = array_values(array_sort($data_combine , function ($value) { 
    return $value['created_at']; 
})); 

array_sort関数を使用して、結合された配列を並べ替えることができます。

https://laravel.com/docs/5.0/helpers#arrays

+0

これはLaravel 5.0で動作しますか?私はまだ5.1で悲しいことではない。 –

+0

はい、5.0のドキュメントへのリンクを更新しました。 – Ankit

+0

素晴らしいできます!ありがとうございました :) –

3

これはLaravel Collectionメソッドで簡単に実行できます。通常の配列とは異なり、Collectionを使用すると、Laravelがモデルで利用できるその他の便利なコレクションメソッドにアクセスできます。

アレイを新しいコレクションにマージし、そのコレクションを並べ替えることができます。上記の書き込み

collect(array_merge($first -> toArray(), $second -> toArray())) -> sortBy('created_at');

より流暢な方法も見えるようにcreated_atニーズを動作するこのため

$first -> push($second) -> flatten() -> sortBy('created_at');

に働くだろう。モデルの可視プロパティでまだ定義されていない場合(およびそのように安全な場合)は、最初にそのプロパティを追加する必要があります。それ以外の場合は、最初のコレクションをループして、addVisible('created_at')を実行して、現在の結果を表示する必要があります。

+0

これは、さまざまなタイプのコレクションで機能しますか? – Ankit

+0

は秒単位でソートされません。何か案は? –

+0

良い点@Ankit - 代わりに配列にマージされる必要があります。上記のようにロジックを修正すると正しくソートされるはずです。 –

0

toArray()を使用する必要はありません、コレクションall()メソッドを持っているので:あなたが両方の配列中に一つだけの要素を持っている場合は

$combine = collect(array_merge($first->all(), $second->all()))->sortByDesc("created_at");

は、試すことができます。

$combine = collect([$first->first(), $second->first()])->sortByDesc("created_at");

関連する問題