Как я могу иметь имя моей сущности вместо идентификатора в связанных таблицах - PullRequest
0 голосов
/ 10 января 2019

Я создаю проект на CakePHP 3.x, где я совершенно новый. У меня проблемы с таблицами, связанными с hasMany, чтобы получить имена моих сущностей вместо их идентификаторов.

Я пришел из CakePHP 2.x, где я использовал App::import('controller', array('Users'), но в представлении для извлечения всех данных для отображения вместо идентификаторов, что считается плохой практикой. И я не хотел бы иметь какое-либо нарушение кода в моем новом коде. Кто-нибудь может мне помочь? вот код:

public function view($id = null)
{     
     $this->loadModel('Users');
     $relatedUser = $this->Users->find()
         ->select(['Users.id', 'Users.email'])
         ->where(['Users.id'=>$id]);
     $program = $this->Programs->get($id, [
         'contain' => ['Users', 'ProgramSteps', 'Workshops']
     ]);

     $this->set(compact('program', 'users'));
     $this->set('_serialize', ['ast', 'relatedUser']);
}

Я ожидаю получить электронную почту пользователя в relatedUsers таблицы программы, но фактический вывод:

Notice (8): Trying to get property 'user_email' of non-object [APP/Template\Asts\view.ctp, line 601].

Действительно нужна помощь

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

В дополнение к ответам @ Greg, переменная $relateduser по-прежнему является объектом запроса, что означает, что попытка доступа к свойству email не удастся. Запрос все еще должен быть выполнен первым.

Вы можете изменить запрос на:

 $relatedUser = $this->Users->find()
     ->select(['Users.id', 'Users.email'])
     ->where(['Users.id' => $id])
     ->first();

Теперь запрос выполняется и возвращается только первая запись.

Существует несколько способов заставить запрос выполнить, многие из них неявно используются. См:

0 голосов
/ 10 января 2019

Вы попросили его сериализовать переменную relatedUser, но это для представлений JSON и XML. На самом деле у вас нет set переменной relatedUser для представления:

$this->set(compact('program', 'users', 'relatedUser'));

Кроме того, вы устанавливаете здесь переменную $users, но она никогда не инициализировалась.

...