Yii - Massive Назначение частного поля - PullRequest
0 голосов
/ 07 февраля 2012

TL; DR - Как массово назначить приватные поля в Yii?

Есть ли в Yii эксперты по StackOverflow? Форумы YiiFramework не очень помогли мне.

У меня есть личное поле hired в моей CActiveRecord модели, которая зависит от другого отношения jobCount. По сути, если есть хотя бы один действительный job (сохраненный в другой таблице), связанный с этим членом, они считаются нанятыми.

Условно я бы установил hired в методе afterFind , но это означало бы загрузку отношения каждый раз. Ради сохранения запросов к базе данных я хотел бы загрузить отношение, только если требуется hired. Поэтому я установил hired в приватное состояние и могу загрузить отношение и установить его после вызова getHired().

Пока все хорошо ...

Проблема возникает, когда я включаю поле hired в свой CGridView. Я хотел бы иметь возможность использовать фильтры столбцов с простой раскрывающейся фильтрацией Да или Нет. После заполнения ваших фильтров CGridView передает обратно запрос GET, который вы бы задали для очищенной модели с использованием массивного назначения ...

$model->attributes = $_GET['ModelName'];

Очевидно, я бы хотел, чтобы hired также был настроен, несмотря на то, что это личное поле. (Я занимаюсь поиском CGridView, не беспокойтесь об этом.) Я сделал это безопасное поле в моей модели, но оно не установлено.

  • setHired() функция не вызывается
  • setAttribute() функция не вызывается
  • setAttributes() функция не вызывается

Какой правильный способ сделать это? Очевидно, я мог бы просто добавить дополнительную строку в действие моего контроллера ...

if (isset($_GET['ModelName']['hired'])) 
    $model->setHired($_GET['ModelName']['hired']);

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

Я понимаю, что это довольно запутанно. Если вы видите способ, которым я мог бы упростить этот hired бит, я был бы признателен за это. Тем не менее, я хотел бы узнать, есть ли способ сделать это.

1 Ответ

0 голосов
/ 07 февраля 2012

Полагаю, вам нужно просто добавить свой атрибут в список атрибутов.

public function attributeNames()
{
    $names = parent::attributeNames();
    $names[] = 'hired';
    return $names;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...