CakePHP 3 внешний ключ в поле зрения - PullRequest
0 голосов
/ 30 августа 2018

У меня есть 2 таблицы: пользователи, уровни

У пользователей есть поля: id, имя пользователя, пароль, электронная почта, level_id Уровни имеют поля: id, name

В UsersController я хочу отправить данные пользователя и его внешний ключ для просмотра.

 $user = $this->Auth->User();
 $this->set(compact('user'));

В поле зрения я хочу отображать имя уровня этого пользователя. Как я могу это сделать?

Я пытался:

$user->level;
$user->username->level
$user->level_id->name

Ofc. не работал. Что я делаю не так?

Я только начал изучать CakePHP, и это остановило меня, потому что я никогда не использовал иностранный ключ раньше.

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете использовать ассоциации Cakephp для того же. Прежде всего добавьте еще одно поле в Levels таблицу с именем user_id.

Предполагается, что пользователь имеет отношение один к одному с уровнем. Затем создайте файл с именем UsersTable.php в папке / src / Model / Table и определите ассоциацию вашей модели следующим образом

class UsersTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasOne('Levels');
    }
}

Теперь вы можете выполнить запрос поиска в вашем UsersController, как показано ниже:

 $user = $this->Users->find('all')->where(['Users.id' => $id])->contain(['Levels'])->toArray();
 $this->set(compact('user'));

Затем в вашем файле ctp вы можете получить доступ к имени уровня как:

echo $user['level']['name'];

Для дальнейшего чтения ассоциаций: https://book.cakephp.org/3.0/en/orm/associations.html

Построитель запросов: https://book.cakephp.org/3.0/en/orm/query-builder.html

...