#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
это был бы способ получить к нему доступ.