2016-06-09 3 views
-1

Ich kann keine meiner Daten aus dem Array in der Ansicht anzeigen. Ich habe keine Ahnung warum, wie ich den Konventionen zu folgen scheinen. Es ist der gleiche Fehler mit jedem Feld. Ich zeige die Daten im Debug unten, so dass es nur ein Array von Tabellenwerten ist. Wie zeige ich das Array von Daten aus dem folgenden Array in einer Ansicht an? Hinweis ich nur nur ein Beispieldaten des ersten Datensatzes gab, da es zu viele Daten in dem Array istIch kann meine Daten nicht in einem Forloop in einer CakePHP3-Ansicht anzeigen

Notice (8): Trying to get property of non-object 
    <?php 
      foreach ($query3 as $bookmark): 
      ?> 
      <tr> 
       <?php 
       debug($bookmark); 
       ?> 

       <td><?= h($bookmark->lessons->id) ?></td> 
       <td><?= h($bookmark->lessons->lesson_date) ?></td> 
       <td><?= h($bookmark->tutors->first_name) ?></td> 
       <td><?= h($bookmark->tutors->last_name) ?></td> 


      </tr> 
      <?php endforeach; ?> 



object(App\Model\Entity\Lesson) { 

    'tutoring_type_id' => (int) 1, 
    'students' => [ 
     'id' => '249', 
     'first_name' => 'Jams', 
     'last_name' => 'Phil' 
    ], 
    'tutoring_type' => object(App\Model\Entity\TutoringType) { 

     'value' => 'Individual Tuition', 
     '[new]' => false, 
     '[accessible]' => [ 
      '*' => true 
     ], 
     '[dirty]' => [], 
     '[original]' => [], 
     '[virtual]' => [], 
     '[errors]' => [], 
     '[invalid]' => [], 
     '[repository]' => 'TutoringTypes' 

    }, 
    'lessons' => [ 
     'id' => '12419', 
     'lesson_date' => '2016-05-31' 
    ], 
    'tutors' => [ 
     'id' => '12', 
     'first_name' => 'drew', 
     'last_name' => 'Toy' 
    ], 
    'subjects' => [ 
     'id' => '16', 
     'name' => 'Maths: Year 7 - 10' 
    ], 
    'terms' => [ 
     'id' => '12', 
     'title' => 'Term Four - 2015' 
    ], 

UPDATE 
    $query3 = $this->Lessons->find() 
       ->contain(['Tutors','Subjects', 'TutoringTypes','Terms','Students']) 
       ->select(['lessons.id','lessons.lesson_date','tutors.id','tutors.first_name','tutors.last_name','TutoringTypes.value', 
        'subjects.id','subjects.name'])  
       ->where(['Lessons.lesson_date >' => $a3 
        ]); 


$this->set(compact('query3')); 
     $this->set('_serialize', ['query3']); 
+1

'' und Studentische lessons' scheinen Arrays und nicht Objekte. Also sollten Sie '$ bookmark-> lessons ['id']' machen. Ich weiß nicht, warum Sie Arrays anstelle von Objekten haben, Sie sollten Ihren 'find()' Code zeigen – arilia

+0

Ich habe bereits unten beantwortet und es funktioniert. Ich konnte diese Information in den Dokumenten nicht finden und ich gab das Datenfeld. Ich habe eben auch den Fund() gegeben, wenn es hilft (siehe unten) .. Was meinst du damit ich Objekte hätte verwenden sollen? Ich kann diese Informationen nicht in den Dokumenten finden, können Sie mir bitte zeigen – ajt

+0

Ich überprüfte die Dokumente auf Sammlungen. Ich wollte nur die Ergebnisse in einer Ansicht anzeigen, also habe ich ein Array verwendet. Wenn ich weitere Methoden für die Abfrage verwenden möchte, würde ich das Abfrageobjekt und kein Array benötigen, – ajt

Antwort

0

ich die Antwort gefunden anzuzeigen und i coudnt dies in der Dokumentation zu finden. Es funktioniert, aber wenn es einen besseren Weg gibt, dann korrigieren Sie es bitte.

<td><?= $bookmark->lessons['id'] ?></td> 
    <td><?= $bookmark->lessons['lesson_date'] ?></td> 
    <td><?= $bookmark->tutors['first_name'] ?></td> 
    <td><?= $bookmark->tutors['last_name'] ?></td> 
    <td><?= $bookmark->subjects['name'] ?></td> 

Die andere Möglichkeit besteht darin, einen Objektsatz zu verwenden, der in der Abfrage zurückgegeben wird. Selbst nachdem ich Experten gefragt habe, wie ich das mache, werde ich immer noch von einigen markiert. Wo ist das in den Dokumenten?

$query3 = $this->Lessons->find() 
       ->contain(['Tutors','Subjects', 'TutoringTypes','Terms','Students']) 
       ->select(['Lessons.id','Lessons.lesson_date','Tutors.id','Tutors.first_name','Tutors.last_name', 
        'Subjects.name','TutoringTypes.value'])  
       ->where(['Lessons.lesson_date ' => $a3 
        ]); 
      $query3->hydrate(true); 


      $query3->matching('Students', function ($q) use ($a8) { 

       return $q 
        ->select(['Students.id','Students.first_name','Students.last_name']) 
        ->where(['Students.first_name like' =>'%'.$a8.'%']); 
       }); 

in der Ansicht

  <td><?= $bookmark->id ?></td> 
      <td><?= $bookmark->lesson_date ?></td> 
      <td><?= $bookmark->tutor->first_name ?></td> 
      <td><?= $bookmark->tutor->last_name ?></td> 

      <td><?= $bookmark->students[0]->first_name ?></td> 
      <td><?= $bookmark->students[0]->last_name ?></td> 
      <td><?= $bookmark->subject->name ?></td> 
      <td><?= $bookmark->tutoring_type->value ?></td> 
+1

Informationen in Ihrer Frage hinzufügen, wie Sie Ihren Aufruf find() erstellen. Scheint verwandt mit deiner [anderen] Frage (http://stackoverflow.com/questions/37716863/different-output-for-model-name-with-capital-letter-in-cakephp3) Frage, aber es ist schwer zu sagen, da wir nicht ' Wissen Sie viel über Ihre Beziehungen und Ihre Fragen – arilia

+0

Wo sind diese Informationen zu den Dokumenten, über die Sie sprechen? Ich konnte es selbst nicht finden, also was soll ich tun? Ich habe Backen benutzt und ich habe auch die Syntax nicht richtig erraten. – ajt

+0

@ AD7six scheint, dass der Benutzer andere 2 Fragen über im Grunde das gleiche Problem [hier] (http://stackoverflow.com/questions/37716863/different-output-for-model-name-with-capital-letter-in- cakephp3) und [hier] (http://stackoverflow.com/questions/37714749/i-cant-display-fields-from-a-table-with-andunderscore-in-cakephp3). Irgendwie ist sein DBMS nicht zwischen Groß- und Kleinschreibung und gibt keinen Fehler, wenn er "Lektionen" statt "Lessons" schreibt, aber cake gibt ein Array statt eines Objekts zurück. Ich weiß nicht, ob das das gewünschte Verhalten ist, ein Bug oder was auch immer. – arilia