отображение данных из соответствующего предложения в cakephp3

#cakephp #cakephp-3.0

#cakephp #cakephp-3.0

Вопрос:

Как мне отобразить данные из соответствующего предложения (идентификатор и имя таблицы subjects), поскольку, похоже, ничего не работает. Я получаю данные, но, похоже, не могу отобразить идентификатор или имя субъекта? Я попробовал несколько вариантов и проверил документы cakephp3, которые, похоже, ничего не говорят по этому вопросу.

ошибка заключается в попытке получить свойство не-объекта

 //controller
 $tutorSubjects = $this->Tutors->getAllTutorSubjects($searchSubject);

          foreach( $tutorSubjects as $item2):
         //      
          //    debug($item2);
            debug($item2->Tutor->Subjects->name);  
            debug($item2->Tutors->Subjects->name);  
           debug($item2->Tutors->Subject->name);  
           debug($item2->tutor->subjects->name); 
           debug($item2->subjects->name);   
           debug($item2->Subjects->name); 
            debug($item2->subject->name);

          endforeach;

//data
object(AppModelEntityTutor) {

    'id' => (int) 12,
    'last_name' => 'Towe',
    'first_name' => 'Andre',
    '_matchingData' => [
        'Subjects' => object(AppModelEntitySubject) {

            'id' => (int) 28,
            'name' => 'Physics: Year 11',
            '[new]' => false,
            '[accessible]' => [
                '*' => true
            ],
            '[dirty]' => [],
            '[original]' => [],
            '[virtual]' => [],
            '[errors]' => [],
            '[invalid]' => [],
            '[repository]' => 'Subjects'

        }
    ],

//model
 $query3 = $this->find()
            // ->contain(['Subjects'])
              ->select(['Tutors.id','Tutors.last_name','Tutors.first_name'])
               ->where(['Tutors.tutor_inactive'=>0 
                   ])
              ->order(['Tutors.first_name' => 'ASC'])
              ->hydrate(true);

      if ($subId>0){

          $query3->matching('Subjects', function ($q) use ($subId) {

                 return $q
                   ->select(['Subjects.id','Subjects.name'])
                  ->where(['Subjects.id' =>$subId]);
                });

         return $query3;
       }
  

Ответ №1:

Данные, которые вы включили, довольно четко показывают, что существует _matchingData свойство и что это массив. Итак, $item2->_matchingData['Subjects']->name это был бы способ получить к нему доступ.