2017-05-12 3 views
0

私のローン管理laravelアプリケーションのアクティビティリストを表示したいローンが許可されている日(created_at)またはローンを閉じることができる日に/完了(deleted_at)。Laravel | 2つのコレクションを比較し、created_atおよびdeleted_atフィールドに基づいてその属性をエコーする

私が使用してこれらの2つのコレクションを取得しています:

$new_loans = loan::withTrashed()->where('created_at', '>=', Carbon::today())->get(); 

$completed_loans = loan::onlyTrashed()->where('deleted_at', '>=', Carbon::today())->get(); 

私の問題は、私は動的にローンが作成されたときやローンを閉じたときに基づいて、これら2つのコレクションの属性を表示したいです。

と仮定します。

new_loans | completed_loans 

    1 - 10 am | 3 - 8 am 

    2 - 12 am | 4- 11 am 

出力は次のようになります。

活動

  • 3から8午前、ローンは
  • 1閉じた - 午前10時、新規作成ローン
  • 4 -

    foreach ($new_loans as $new) 
        { 
         foreach ($completed_loans as $comp) 
         { 
    
          if($comp->deleted_at > $new->created_at) 
          { 
          echo $new->customer->first_name.'----- New---'.$new->created_at->diffForHumans()."<br>"; 
          } 
          else 
          { 
          echo $comp->customer->first_name.'----- Completed---'.$comp->deleted_at->diffForHumans()."<br>"; 
          } 
    
         } 
        } 
    

    できる人のショー、私はforeachifsを使用して、いくつかのロジックを記述しようとしたが、そのは明らかに間違っている

午前12時、新しいローン - 午前11時、ローンは

  • 2を閉じました私はこれをする方法?

  • 答えて

    3

    全体を1つのクエリに結合し、結果を目的の順序で並べ替えることができます。

    また、ループごとに新しいクエリを実行しないように、eager loadingcustomerの関係にする必要があります。

    一緒に入れているすべては、次のようになります。

    優れた
    $loans = loan::with('customer') 
        ->withTrashed() 
        ->where('created_at', '>=', Carbon::today()) 
        ->orWhere(function($query) { 
         return $query->whereNotNull('deleted_at') 
          ->where('deleted_at', '>=', Carbon::today()); 
        }) 
        ->get() 
        ->sortBy(function($loan) { 
         return $loan->deleted_at === null ? $loan->created_at : $loan->deleted_at; 
        }); 
    
    foreach ($loans as $loan) { 
        if($loan->deleted_at === null) { 
         echo $loan->customer->first_name.'----- New---'.$loan->created_at->diffForHumans()."<br>"; 
        } else { 
         echo $loan->customer->first_name.'----- Completed---'.$loan->deleted_at->diffForHumans()."<br>"; 
        } 
    } 
    
    +0

    が、私が思うに、このクエリでの問題、ローンが完了するたびに(削除)、その後の結果にそれぞれ作成した通知も表示されているがあります。 –

    +0

    ローンが完了したような場合、 'Ronak ----- New --- 3日前のような出力を得ます。 Ronak -----完了--- 4 seconds ago'、私は現在の日 –

    +0

    答えを更新して、あなたの例のようにどちらか一方のみをエコーし​​ます –