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 Пользовательский объект как поля, связанные с идентификатором авторизации

Приносим извинения, если это не ваш сценарий, я только что нашел эту текущую ветку, когда искал ответ на мою проблему, и это определенно было ближе всего к моей собственной проблеме.

Другие вопросы по тегам