2012-02-06 24 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; 
}