2010-08-26 11 views
2

Так вот сценарий:отношений в 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'), 
    ); 
} 

Я предполагаю, что-нибудь одного отношения не должны быть определить?

Заранее спасибо.

BTW, я делаю гибкую книгу Yii, и я в конечном итоге задал себе этот вопрос. В AR-классе есть один вариант (http://www.yiiframework.com/doc/guide/database.arr).

Но в этом случае факультативно по какой-либо причине?

ответ

5

Это помогает мне думать о разнице между BELONGS_TO и HAS_ONE как «где внешний ключ хранится»? Если модель проекта хранится в «Issue_Id», потенциально проблема может иметь много проектов. Вы используете связь HAS_ONE, чтобы заявить, что даже если проблема имеет много проектов, у нее только один.

Однако более распространенным случаем является сохранение Project_Id в модели Issue (и я предполагаю, что вы). Затем вы должны использовать отношения BELONGS_TO. Похоже, вы правильно определили отношения.

Кто-то отправил аналогичный вопрос, касающийся отношений Yii здесь, что я помог ответить: yii - using relation HAS_ONE to get data from the related table to display in list page

Что касается вашей заботы о «необходимости», чтобы определить отношения, вы не «необходимость» для определения любого. Вы можете написать свои собственные SQL-запросы, чтобы сделать то же самое. Отношения ActiveRecord - это просто удобная задача, упрощающая запросы к соответствующим записям. Если вы никогда не будете искать проект Issue, тогда вам не нужно «определять» отношения BELONGS_TO проекта.

Без фактического просмотра структуры базы данных это выглядит так, как будто у вас все настроено правильно. Теперь вы можете легко сделать проблемы с $ issue-> project и $ project-> «ленивыми» реляционными запросами, полностью используя возможности Relational Active Record. Приветствия и удачи в проекте!

1

В модели «Проблема» у вас уже есть отношение, указанное как модель проекта BELONGS_TO.

Я также получил новую книгу yii. Это мне очень помогло!

День кодирование :)

 Смежные вопросы

  • Нет связанных вопросов^_^