Связанная активная запись - метод контроллера или модели? - PullRequest
1 голос
/ 08 марта 2011

Я пытаюсь получить доступ к связанной информации о модели в Yii из представления, и мне нужно создать метод. Я не уверен, должен ли метод идти в контроллере или модели ...

Сценарий: - Магазин "У одного" - Магазин «Принадлежит станции» (в таблице «магазин» есть столбец «идентификатор станции»)

В подробном представлении станции (радиостанция / представление / 1) я хочу проверить, есть ли на этой конкретной станции магазин, и если да, я хочу вернуть идентификатор из этого магазина.

Итак, мои вопросы:

1) Я создаю метод, чтобы найти эту информацию и поместить ее в контроллер или модель?

2) Стоит ли спрашивать у станции эту информацию или в магазине?

3) Я знаю, что контроллер является связующим звеном между моделями и представлениями, поэтому мне имеет смысл поместить этот метод в контроллер. Тем не менее, в Yii кажется, что в файле представления есть следующее:

CHtml::listData(Company::model()->findAll()

Мне кажется, что представление напрямую взаимодействует с моделью

Ответы [ 2 ]

1 голос
/ 08 марта 2011

В моделях вы можете установить связь между моделями Station и Store в функции отношений, если вы используете Active Record. В этом случае получение идентификатора магазина возможно с помощью одной короткой строки кода (что-то вроде $ storeId = $ model-> store-> id;). Таким образом, вы можете легко вставить этот код в свой контроллер и при этом сохранять его стройность (Lean-контроллеры, толстые модели).

Вам следует «попросить» Станцию ​​для Магазина, потому что вы уже знаете идентификатор станции.

Вы можете пропустить контроллер, если не требуется дополнительная логика между представлением и моделью. Но не забывайте такие вещи, как авторизация.

0 голосов
/ 16 декабря 2011

Да,

Поскольку вы используете активные отношения записи, все, что вам нужно будет сделать

$station = Station::model()->findAll();

$station->store 

и теперь у вас есть доступ к объекту хранилища в базе данных, поэтому вы можете сделать

$station->store->id
$station->store->name

и т. Д.

Да, Yii потрясающий :), но это просто ActiveRecord:)

Также общепринятая практика - общаться с контроллером, а не с моделью непосредственно с точки зрения. Контроллер обрабатывает проверки и передает их модели, когда они верны.

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