2012-02-06 70 views
0

TL; DR - 我如何在Yii中大规模分配私人领域?Yii - 私人领域的大规模转让

在StackOverflow的任何Yii专家? YiiFramework forums并没有真正帮助我。

我在我的CActiveRecord模型中有一个私人字段hired,该模型依赖于另一个关系jobCount。基本上,如果至少有一个与该成员相关联的有效job(存储在另一个表中),则认为它们已被聘用。

通常,我会在afterFind方法中设置hired,但这意味着每次都要加载关系。为了保存数据库查询,我只想加载关系,如果需要hired。所以我将hired设置为私有,并且可以加载该关系并将其设置为调用getHired()

到目前为止好...

的问题出现了,一旦我纳入我的CGridView的hired领域。我希望能够使用列过滤器,并在Yes或No上进行简单的下拉过滤。在填写过滤器后,CGridView会传回一个GET请求,您可以使用大规模分配将其设置为清除模型。

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

很显然,我想hired才能完成设置为好,尽管它是一个私有字段。 (我处理了对CGridView的搜索,请不要担心这一点。)我已经在我的模型中创建了一个安全的字段,但它没有设置。

  • setHired()功能不被调用
  • setAttribute()功能不被调用
  • setAttributes()功能不被调用

什么是做到这一点的正确方法是什么?很显然,我只需要添加一个额外的行我的控制器行动......

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

...但我真的宁愿学习如何允许大规模分配私有字段。

我意识到这是相当复杂的。如果您看到某种方式可以简化此hired位,我会很感激。不过,我想知道是否有办法做到这一点。

回答

0

我想,你只需要将你的属性添加到属性列表。

public function attributeNames() 
{ 
    $names = parent::attributeNames(); 
    $names[] = 'hired'; 
    return $names; 
}