2017-05-30 21 views
0

関連契約が期限切れであるか、終了日に近づいている場合は、コレクションにサービスを追加します。この部分はうまく動作します。しかし、これは1つのセクションなので、問題の理由をオブジェクトに追加したいと思います(次のセクションではハードウェアの問題を強調するなど)。コレクションにオブジェクトの属性を手動で追加した配列に追加

これは最初の繰り返しでは問題ありませんが、サービスに複数の問題が記録されている場合は、setAttribute()を使用することはできません(以前のエントリを上書きするだけです)。 (add()またはpush(),filter()など)。その周り

コードは次のとおりです。

$issuesCollection = collect([]); 

$agreementsRed = Agreement::with('services')->whereDate('expiry_date', '<', Carbon::today()->toDateString()) 
     ->orderBy('vendor', 'asc') 
     ->get(); 

foreach ($agreementsRed as $agreement) { 
foreach ($agreement->services as $service) { 
    if (!$issuesCollection->contains('service_full_name', $service->service_full_name)) { 
       $issuesCollection->push($service); 
       $service->setAttribute('issues', ['Agreement out of date - ' . $agreement->vendor]); 
      } else { 
       // add new item to issues array on object in collection 
      } 
     } 
    } 

$agreementsAmber = Agreement::with('services')->whereBetween('expiry_date', array(Carbon::today()->toDateString(), $amberDate->toDateString())) 
     ->orderBy('vendor', 'asc') 
     ->get(); 

foreach ($agreementsAmber as $agreement) { 
foreach ($agreement->services as $service) { 
      if (!$issuesCollection->contains('service_full_name', $service->service_full_name)) { 
       $issuesCollection->push($service); 
       $service->setAttribute('issues', ['Agreement nearing end date - ' . $agreement->vendor]); 
      } else { 
       // add new item to issues array on object in collection 
      } 
     } 
    } 

は、どのように私は(それが実際のモデルのオブジェクトではありません)だけで、コレクション内のオブジェクトである配列にプッシュすることができますか?

+0

を探していたものを達成するためのソリューションになってしまったあなたは= 'のsetAttribute( '問題'、$ valueが)'同様に '$ service->の問題として値を代入していることを知っていますか$ value'?ループの前にローカル変数を作成し、ループの後に代入を行います。それだけです。 – Chay22

+0

@ Chay22「$ service-> issues = $ value'」と同じように値を割り当てることはどういう意味ですか?私は '$ service-> issues'を正しく表示していると私の見解ではforeachを持っています - ただ一つの問題があることだけです。 – kerrin

答えて

0

これは私が

foreach ($agreementsRed as $agreement) { 
     foreach ($agreement->services as $service) { 
      if (!$issuesCollection->contains('service_full_name', $service->service_full_name)) { 
       $issuesCollection->push($service); 
       $service->setAttribute('issues', ['Agreement out of date - ' . $agreement->vendor]); 
      } else { 
       $issuesCollection->filter(function($item) use ($service, $agreement) { 
        if ($item->service_full_name == $service->service_full_name) { 
         $issues_array[0] = $item->issues; 
         array_push($issues_array[0], 'Agreement out of date - ' . $agreement->vendor); 
         $item->issues = $issues_array[0]; 
        } 
       }); 
      } 
     } 
    } 
関連する問題