2012-01-13 74 views
1

我對這個Yii CGridView問題感到半沮喪,任何幫助或指導將不勝感激。Yii CGridview - 搜索/排序工作,但值不顯示在各個單元上

我有兩個相關的表格商店(shop_id primary)和聯繫人(shop_id foreign),這樣一個商店可能有多個聯繫人。我使用CGridview拉記錄和整理,並在商店模型我的關係,功能是一樣的東西:

'shopscontact' => array(self::HAS_MANY, 'Shopsmodel', 'shop_id'); 

在店網,我需要與現有的聯繫人中的任何一個,顯示店鋪一行。我試圖過濾,搜索網格已經很好,但我陷入了一個非常奇怪的問題。相應的網格列不顯示預期的值。

在CGridview文件,我在做這樣的事情

array(
    'name' => 'shopscontact.contact_firstname', 
    'header' => 'First Name',   
    'value' => '$data->shopscontact->contact_firstname' 
    ), 

顯示聯繫人的名字。然而,即使在搜索/排序都工作的情況下(我通過檢查數據庫關聯發現),網格列變空了! :(當我做的var_dump

array(
    'name' => 'shopscontact.contact_firstname', 
    'header' => 'First Name', 
    'value' => 'var_dump($data->shopscontact)' 
    ), 

轉儲顯示記錄值在_private屬性如下:

private '_attributes' (CActiveRecord) => 
    array 
     'contact_firstname' => string 'rec1' (length=4) 
     'contact_lastname' => string 'rec1 lsname' (length=11) 
     'contact_id' => string '1' (length=1) 

<編輯:>

我的標準模型中的代碼如下:

$criteria->with = array(
    'owner', 
    'states', 
    'shopscontacts' => array(
     'alias' => 'shopscontacts', 
     'select' => 'shopscontacts.contact_firstname,shopscontacts.contact_lastname', 
     'together' => true 
    ) 
); 

< /編輯>

如何訪問各自列中的值?請幫忙! :(

+0

是不是shopscontact數組? – schmunk 2012-01-13 22:49:03

+0

是的。看起來如此。 – zarun 2012-01-14 13:02:18

回答

2

嗯,我還沒有使用with()和together()方法。有趣的是,如何在列的'值'部分中,$data->shopscontacts加載新鮮的關係,基於relations()定義(並且不基於您聲明的criteria)。

一個更清潔的方式來處理陣列輸出可能是這樣的:

'value' => 'array_shift($data->shopscontacts)->contact_lastname' 

也許有更好的方式來做到這一點,不過,將建立一個新的(附加)的關係,這樣的在shops型號:

public function relations() 
{ 
    return array(
    'shopscontacts' => array(self::HAS_MANY, 'Shopsmodel', 'shop_id'), // original 
    'firstShopscontact' => array(self::HAS_ONE, 'Shopsmodel', 'shop_id'), // the new relation 
); 
} 

然後,在你CGridView你可以設置一列像這樣:

'columns'=>array(
    'firstShopscontact.contact_lastname', 
), 

乾杯

2

由於'shopscontact'是has-many關係的名稱,因此$data->shopscontact應該返回一個包含所有相關商店的數組......您是否修改關係以僅返回一條記錄(如果我沒有如果你這樣做了,我可以看到你的過濾代碼嗎?

PS預感得到一個快速但時間的解決方案:你試過'value' => '$data->shopscontact['contact_firstname']'

+0

嗨, **您是否修改關係以僅返回一條記錄?** 對不起 - 我是Yii的新手。還沒有完成那樣的故意。另外,''value'=>'$ data-> shopscontact [\'contact_firstname \']''是我嘗試過的,但沒有奏效。另外,我現在編輯了上面的帖子,並添加了我正在使用的'$ criteria->和'。 – zarun 2012-01-14 12:46:00

+0

我設法訪問這個值''value'=>'$ data-> shopscontacts [0] [「contact_lastname」]''但我確定它不應該如何完成。幾乎在那裏,你能分享更多嗎? – zarun 2012-01-14 13:02:47