如何在选择其他模型时从模型中获取数据?

时间:2013-04-29 03:05:38

标签: model yii

我为事件类别创建了一个模型,为事件创建了另一个模型。当用户选择任何特定的事件类别时,我想显示该类别下的所有事件。

以下是我给他们模特的关系。 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',
),
)); ?>

我哪里错了?

3 个答案:

答案 0 :(得分:1)

您的类别中的event关系是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,就好像它是常规类别属性一样。

答案 1 :(得分: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,
    ));
}

在视图中:

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

答案 2 :(得分:0)

看起来您正在尝试返回填充了事件类别信息的事件列表。我不会从活动类别中找到它,而是从活动开始。然后,您可以使用快捷方式访问事件类别信息。像这样:

在控制器中

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

然后在视图中,您的属性数组看起来像

'attributes' => array(
   'category.evntcatm_id',
   'category.evntcatm_name',
    ...
   'evntm_evntcatm_id',
   'evntm_name',
),