2013-04-29 79 views
0

我爲事件類別創建了一個模型,併爲事件創建了另一個模型。當用戶選擇任何特定的事件類別時,我想顯示該類別下的所有事件。如何在選擇另一個模型時從模型中獲取數據?

以下是我給他們的模型的關係。 EventCategory.php型號:

return array(
    'event' => array(self::HAS_MANY, 'Event', 'event_category_id'), 
); 

Event.php型號:

return array(
    'category' => array(self::BELONGS_TO, 'EventCategory', 'event_category_id'), 
); 

當我嘗試在事件類別視圖退回事件,NOT SET返回。

<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model, 
'attributes'=>array(
    'evntcatm_id', 
    'evntcatm_name', 
    'evntcatm_desc', 
    'evntcatm_img', 
    'event.evntm_evntcatm_id', 
    'event.evntm_name', 
), 
)); ?> 

我在哪裏出錯了?

回答

1

關係event int類別是HAS_MANY。因此$category->event將是一個Event記錄的數組。那麼Yii應該怎麼知道,該如何處理這些對象呢?不過,您可以將吸氣劑添加到您的Category型號中。例如,對於事件名稱:

public function getEventNames() 
{ 
    $names = array(); 
    foreach($this->events as $event) { 
     $names[] = $event->eventm_name; 
    } 
    return implode(', ', $names); 
} 

然後用eventNames在您的DetailView,就好像它在那裏常規類別屬性。

0

我已經使用loadModel獲取類別ID,然後將此ID傳遞給dataProvider以比較數據庫中的數據並返回結果。

EventCategoryController.php

public function actionView($id) 
{ 
    $this->layout = 'main'; 
    $model = $this->loadModel($id); 

    $criteria = new CDbCriteria; 
    $criteria->compare('evntm_sts','a',true); 
    $criteria->compare('evntm_evntcatm_id',$model->evntcatm_id,true); 

    $dataProvider = new CActiveDataProvider('Event', array(
     'criteria'=>$criteria, 
    )); 
    $this->render('view',array(
     'model'=>$model, 
     'dataProvider'=>$dataProvider, 
    )); 
} 

在View:

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_event', 
    'summaryText'=> '', 
)); ?> 
0

看起來好像你正試圖返回與填充事件類別信息的事件列表。我不會從事件類別中選擇它,而是從事件中去處理它。然後您可以使用快捷方式訪問事件類別信息。事情是這樣的:

在控制器

$model = Event::model()->fetchAll(); 

然後在視圖中的屬性陣列看起來像

'attributes' => array(
    'category.evntcatm_id', 
    'category.evntcatm_name', 
    ... 
    'evntm_evntcatm_id', 
    'evntm_name', 
), 
相關問題