Отношения функционируют в модели AR, многие к одному отношению
Итак, вот сценарий:
У меня есть две таблицы, выпуск и проект.
Проект может иметь много проблем, а проблема может быть только одним проектом.
Поскольку проблема-это много к одному,нужно ли ее определять?
Потому что я знаю, что в модели проекта у меня есть:
public function relations()
{
return array(
'issues' => array(self::HAS_MANY, 'Issue', 'project_id'),
'users' => array(self::MANY_MANY, 'User', 'tbl_project_user_assignment(project_id, user_id)'),
);
}
Для модели выпуска у меня нет ничего, кроме внешних ключей:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'requester' => array(self::BELONGS_TO, 'User', 'requester_id'),
'owner' => array(self::BELONGS_TO, 'User', 'owner_id'),
'project' => array(self::BELONGS_TO, 'Project', 'project_id'),
);
}
Я предполагаю, что ничего к одному отношению не нужно определять?
Заранее благодарю вас.
Кстати, я делаю agile Yii книга и я закончили тем, что задали себе этот вопрос. В классе AR есть опция has-one (http://www.yiiframework.com/doc/guide/database.arr).
Но является ли этот случай по какой-то причине необязательным?2 ответа:
Это помогает мне думать о разнице между BELONGS_TO и HAS_ONE как "где хранится внешний ключ"? Если модель проекта хранит "Issue_Id", то потенциально выпуск может иметь много проектов. Вы используете отношение HAS_ONE, чтобы заявить, что даже если проблема может иметь много проектов, она имеет только один.
однако более распространенный случай-это если вы сохраняете Project_Id в модели проблемы (и я предполагаю, что это так). Затем вы должны использовать отношение BELONGS_TO. похоже, что вы правильно определили отношения выше.
Кто-то опубликовал здесь аналогичный вопрос, касающийся отношений Yii, на который я помог ответить: yii-использование отношения HAS_ONE для получения данных из связанной таблицы для отображения на странице списка
Что касается вашего беспокойства по поводу "необходимости" определять отношения, вам не нужно их определять. Вы можете написать свои собственные SQL-запросы, чтобы сделать то же самое. Отношения ActiveRecord-это просто удобная вещь, чтобы сделать запрос связанным записи проще. Если вы никогда не собираетесь искать проект проблемы, то вам не нужно "определять" отношение "project" BELONGS_TO.
Даже не видя структуры вашей базы данных, мне кажется, что вы все настроили правильно. Теперь вы можете легко создавать как $issue - > project, так и $project->issues "ленивые" реляционные запросы, в полной мере используя возможности реляционной активной записи. Ура и удачи с проектом!