2016-11-29 1 views
0

Ich habe eine rekursive Beziehung (Abschnitte und Unterabschnitte) wie folgt definiert in ReportSection Modell:Laravel Relationship Sammlung Iteration gibt ein boolsches

function sub_sections() { 
    return $this->hasMany('App\ReportSection', 'parent_id'); 
} 

und ich versuche, durchlaufen wie so:

$section = Section::find($id); 
     \DB::beginTransaction(); 
     try { 
      foreach(ReportForm::unlockedForm($section->form_id)->get() as $report) { 
      foreach($report->sections()->where('section_id', $section->id)->get() as $reportSections) { 
       \Log::info($reportSections); 
       foreach($reportSections as $rSection) { 
       \Log::info($rSection); 
       foreach($rSection->sub_sections as $subSection) { 

die Linie \Log::info($reportSections); gibt {"id":3,"report_form_id":1,"name_en":"DDD","name_fr":"DDD","created_at":"2016-11-29 07:47:24","updated_at":"2016-11-29 07:47:32","section_id":118,"parent_id":1,"order":99,"hidden":0} als

erwartet

aber das Iterieren durch es gibt irgendwie einen boolean \Log::info($rSection); gibt 1

Die letzte Zeile foreach($rSection->sub_sections as $subSection) { den Fehler 'Trying to get property of non-object'

Warum sollte Iteration durch eine Beziehung gibt Sammlung einen boolean geben? Was mache ich falsch?

Edit: geändert sub_sections(), um sub_sections aber der Fehler noch vorhanden ist

Antwort

0

Sie sollten den Attributnamen nicht die Methode aufrufen:

foreach($rSection->sub_sections as $subSection) 
{} 
+0

Ja ich dies erkennen jetzt, und wahrscheinlich wäre es schon erwischt, aber der Fehler passiert, bevor es ankommt, ich habe die Änderungen vornehmen und $ rSection ist immer noch 1. – Ave

+0

Es ist das gleiche hier: '$ report-> sections-> where ('section_id', $ section-> id) -> get()' –

+0

Ich denke, man muss es als Methode bezeichnen, wenn Abfrage – Ave

0

Ok nach eine Pause ich in der Lage war, um herauszufinden, dass das Problem war, dass ich zweimal dieselbe Sammlung durchging.

Statt

foreach(ReportForm::unlockedForm($section->form_id)->get() as $report) { 
      foreach($report->sections()->where('section_id', $section->id)->get() as $reportSections) { 
       foreach($reportSections as $rSection) { 

Es sollte

gewesen
foreach(ReportForm::unlockedForm($section->form_id)->get() as $report) { 
      foreach($report->sections()->where('section_id', $section->id)->get() as $rSection) {