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
бит, я был бы признателен за это. Тем не менее, я хотел бы узнать, есть ли способ сделать это.