我为事件类别创建了一个模型,为事件创建了另一个模型。当用户选择任何特定的事件类别时,我想显示该类别下的所有事件。
以下是我给他们模特的关系。 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',
),
)); ?>
我哪里错了?
答案 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',
),