TL; DR - 如何在Yii中大量分配私人字段?
StackOverflow上的任何Yii专家? YiiFramework forums并没有真正帮助我。
我的CActiveRecord模型中有一个私有字段hired
,该字段依赖于另一个关系jobCount
。基本上,如果至少有一个与该成员关联的有效job
(存储在另一个表中),则考虑雇用它们。
传统上,我会在afterFind方法中设置hired
,但这意味着每次都会加载关系。为了保存数据库查询,我只想在需要hired
时加载关系。所以我将hired
设置为私有,并且可以加载关系并在调用getHired()
后设置它。
到目前为止一直很好......
一旦我在CGridView中加入hired
字段,就会出现问题。我希望能够使用列过滤器,在“是”或“否”上使用简单的下拉过滤。在填写过滤器后,CGridView会传回一个GET请求,您将使用大量分配将其设置为已清除的模型...
$model->attributes = $_GET['ModelName'];
显然我希望hired
也可以设置,尽管它是私人领域。 (我处理CGridView的搜索,不要担心。)我已经在我的模型中使它成为一个安全的字段,但它没有设置。
setHired()
函数未被调用setAttribute()
函数未被调用setAttributes()
函数未被调用这样做的正确方法是什么?显然,我可以在控制器动作中添加一行额外的行......
if (isset($_GET['ModelName']['hired']))
$model->setHired($_GET['ModelName']['hired']);
...但我真的很想学习如何大规模分配私人字段。
我意识到这是相当复杂的。如果你看到一些方法可以简化这个hired
位,我会很感激。不过,我想知道是否有办法做到这一点。
答案 0 :(得分:0)
我想,您只需将属性添加到属性列表中即可。
public function attributeNames()
{
$names = parent::attributeNames();
$names[] = 'hired';
return $names;
}