CakePHP Ассоциированные модели доступны после сохранения? - PullRequest
0 голосов
/ 03 августа 2011

РЕДАКТИРОВАТЬ, я переписываю вопрос для большей ясности.

У меня есть модель «профиля», которая относится к модели «пользователя».

Определенный пользователь уже существует. Позже он создает профиль. Контроллер профиля заботится о создании новой записи, но затем ему необходимо обновить поле profile_id как часть ассоциированного пользователя. У меня сложилось впечатление, что saveAll может позаботиться обо всех ассоциациях, но он не работает?

Какой самый простой / CakePHP стандартный способ сделать что-то подобное? Спасибо!

Ответы [ 2 ]

1 голос
/ 03 августа 2011

saveAll () создает новые записи.Поэтому вы не можете использовать его для обновления уже существующей записи в таблице Users.Как уже упоминал Ан Фам, у вас неправильные ассоциации.Профиль принадлежит Пользователю, а Пользователь имеет один Профиль.Имея поле profile_id в вашей таблице Users, вы делаете это наоборот.

Поэтому удалите поле profile_id из таблицы Users, добавьте поле user_id в таблицу Profiles и обновите ассоциации моделей в user.php & profile.php.

Чтобы сохранить новый профильдля существующего пользователя вы можете либо запросить идентификатор пользователя для текущего пользователя, либо, например, получить его через Auth и вручную добавить его в $ this-> data перед вызовом метода save () вашего метода Profile.

1 голос
/ 03 августа 2011

У вас не должно быть поля profile_id в таблице пользователей, у вас должно быть поле user_id в таблице профилей (внешний ключ похож на отношение hasMany).Я удивлен, что приложение все еще работает http://book.cakephp.org/view/1041/hasOne

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

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