Cakephp4, как загрузить связанные данные в объект Entity?
У меня есть таблица пользователей и таблица ролей. У пользователя одна роль. Итак, в UsersTable.php:
$this->belongsTo('Roles', [
'foreignKey' => 'role_id',
'joinType' => 'INNER',
]);
Теперь в User.php (Entity!!) мне нужно имя роли роли пользователя. Но у меня есть только пользовательский объект, в котором нет связанных данных. Теперь у меня есть:
public function getRole()
{
$q = TableRegistry::getTableLocator()->get('Roles');
$roles = $q->find('list')->toArray();
return $roles[$this->role_id];
}
Это работает, но TableRegistry помечен как устаревший в cake4, и я не могу найти другого способа сделать это. Как правильно это сделать?
1 ответ
Если вы хотите использовать данные пользователя и роли в контроллере, вы можете просто сделать, например,
$user = $this->Users->get($id, [
'contain' => ['Roles'],
]);
и получившийся объект имеет $user->role
определяется как Role
организация.
Однако я чувствую, что вы это уже знаете и имеете другую проблему, которая может совпадать, а может и не совпадать с проблемой, которую я решал совсем недавно. Посмотрите ответ ndm на мой вопрос здесь, и, надеюсь, он вам поможет! CakePHP 4.1 Пользовательский объект как поля, связанные с идентификатором авторизации
Приносим извинения, если это не ваш сценарий, я только что нашел эту текущую ветку, когда искал ответ на мою проблему, и это определенно было ближе всего к моей собственной проблеме.