CakePHP - относится к данным. Данные не сохраняются в таблице соединений. - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть 3 таблицы: UsersTable , RolesTable , UsersRolesTable

Я хочу назначить пользователю данную роль при регистрации, но он не сохраняет данные в таблицу соединений ( UsersRolesTable ), и я не знаю почему.

Присутствуют следующие ассоциации:


UsersTable

$this->belongsTo('Roles', [
  'foreignKey' => 'user_id',
  'targetForeignKey' => 'role_id',
  'joinTable' => 'users_roles'
]);

RolesTable

$this->belongsToMany('Users', [
  'foreignKey' => 'role_id',
  'targetForeignKey' => 'user_id',
  'joinTable' => 'users_roles'
]);

UsersRolesTable

$this->belongsTo('Users', [
  'foreignKey' => 'user_id',
  'joinType' => 'INNER'
]);

$this->belongsTo('Roles', [
  'foreignKey' => 'role_id',
  'joinType' => 'INNER'
]);

В моем пользовательском контроллере у меня есть следующая функция

public function register()
{
  $roles = TableRegistry::get('Roles');
  $role_data = $roles->findByName('User')->first();
  $user = $this->Users->newEntity();

  if ($this->request->is('post')) {
    $data = $this->request->getData();
    $user->profile = $this->Users->setDefaultProfile();
    $user->role = $role_data;
    $user = $this->Users->patchEntity($user, $data);
    if ($this->Users->save($user)) {
      $this->Flash->success(__('Ihr Account wurde erfolgreich angelegt. Sie können sich nun einloggen.'));

      return $this->redirect(['action' => 'login']);
    }
    $this->Flash->error(__('Ihr Account konnte nicht angelegt werden. Bitte versuchen Sie es später erneut.'));
  }
  $this->set(compact('user'));
}

Я читаю в книге с cakephp, но могуэто не работает, и не оборачивайся вокруг этого очень хорошо.

Может кто-нибудь увидеть или объяснить ошибку, которую я здесь делаю?


Если вам нужна дополнительная информация, пожалуйста, сообщите мне.


1 Ответ

0 голосов
/ 06 декабря 2018

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


С CakePHP - Соглашения

Соединяемые таблицы, используемые в отношениях BelongsToMany между моделями, должны быть названы в честь моделитаблицы, к которым они присоединятся, или команда bake не будут работать, расположенные в в алфавитном порядке (article_tags, а не tags_articles).Если вам нужно добавить дополнительные столбцы в соединительную таблицу, вы должны создать отдельный класс сущности / таблицы для этой таблицы.


Поэтому мои отношения были определены неправильно.Мне пришлось удалить MVC для UsersRoles, переименовать мою таблицу с users_roles на roles_users и снова испечь ее.

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

НО!Я перенастрою этот сценарий в ближайшем будущем и поищу способ решения этой проблемы с помощью таблицы с именем custom.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...