2017-12-29 62 views
0

複数のコレクションを1つにマージし、そのコレクションを日時でソートしてコレクション間にタイムラインを作成します。Laravelは複数のコレクションをマージし、対応する日時フィールドでソートします

Heresは、日付と時刻の列を並べ替えるの異なる名前です。

私はこのクリーナーを作るために何かできますか?おそらく->mergeでforeachループを付けますか? foreachループで醜いように見えます。 注:のコードは動作しますが、それは怠け者だと思っていますし、コレクション内のアイテムが増えると遅くなるかもしれません。

// Create timeline, sortby creation datetimes. 
$TimelineItems = collect(); 

$TimelineItems = $Appointments->merge($lead->SalesResult); 
foreach ($TimelineItems as $key => $TimelineItem) { 
    if(!empty($TimelineItem->appointment_created)) { 
     $TimelineItems[$key]->created_at = $TimelineItem->appointment_created; 
    } 
    if(!empty($TimelineItem->salesresult_created_timestamp)) { 
     $TimelineItems[$key]->created_at = $TimelineItem->salesresult_created_timestamp; 
    } 
} 
$TimelineItems = $TimelineItems->sortByDesc('created_at'); 
dd($TimelineItems); 

答えて

1

最高ソリューションは、おそらく標準の日付スタンプフィールドを使用するようにモデルオブジェクトを標準化するだろう - そして、あなたがそれらを変換する必要はありません。

あなたがeach()transform()を使用することができ、それに失敗:

// Create timeline, sortby creation datetimes. 
$TimelineItems = collect(); 
$AppointmentTemps = collect($Appointments); 
$SalesResultTemps = $lead->SalesResult; 

$TimelineItems = $AppointmentTemps 
    ->merge($SalesResultTemps) 
    ->transform(function ($item) { 
     if(!empty($item->appointment_created)) { 
      $item->created_at = $item->appointment_created; 
     } 
     if(!empty($item->salesresult_created_timestamp)) { 
      $item->created_at = $item->salesresult_created_timestamp; 
     } 

     return $item; 
    }) 
    ->sortByDesc('created_at'); 

dd($TimelineItems); 

コレクション上のメソッド繰り返し処理を変換し、コレクション内の各項目に指定したコールバックを呼び出します。コレクション内のアイテムは、コールバックから返された値に置き換えられます。

参照のためにtransform()コレクションメソッドのドキュメントを参照してください。

+0

ありがとうございます。私はあなたのコードを変換してみましたが、それはソートされません。それはコレクションをマージしますが、並べ替えはしません。各コレクションのキーを並べ替えるように見えますが、dd()は適切に並べ替えられません。コレクションを並べるだけです。 – hinteractive02

+0

'20 =>予定{#584▶} 21 =>予定{#585▶} 22 => SalesResult {#532▶} 33 => SalesResult {#543▶} 40 => SalesResult {#550▶ } ' – hinteractive02

+0

アイテムは' created_at'セットになっていますか? –

関連する問題