Yii activeCheckBoxList

时间:2012-10-09 09:18:58

标签: php activerecord yii

我有一个奇怪的探测器

在AR模型中,Gift i与类别有很多关系

              'categories'=>array(self::MANY_MANY, 'GiftCategory',
                        'tbl_category_gift(gift_id, category_id)'),

当我调用$ gift->类别时,它返回活动记录对象,在数据库中,我看到值正确存储

但是当我写作

        <? echo $form->checkBoxList($model, "categories", GiftCategory::listData()); ?>

在我的复选框列表中,如果模型有类别,则只选择1个值,我不明白wtf是它,请帮助:)

问题:Yii activeCheckBoxList只显示1个已选中(仅限第一个)

2 个答案:

答案 0 :(得分:2)

它不起作用,因为,Yii creator Qiang

  

...在activeListBox()中,第二个参数应该是一个属性   名称,而不是关系名称。在您的情况下,您可能需要声明一个新的   用于存储选择的属性。

我相信同样的事情适用于activeCheckBoxList。

我解决这个问题的方法如下(此博客帖子很有用Retrieving selected checkbox items in yii

为您的关系添加索引选项

'categories' => array(self::MANY_MANY, 
    'Category', 'post_category(post_id, category_id)','index'=>'id'),

向模型添加属性

public $selectedCategoryIds

在afterFind中填充此属性

public function afterFind()
{
    parent::afterFind();
    $this->selectedCategoryIds = array_keys($this->categories);
}

在您的视图中使用此新“属性”

<? echo $form->checkBoxList($model, "selectedCategoryIds", GiftCategory::listData()); ?>

为了正确处理更新此数据,请参阅Larry Ullman的文章Handling Related Models in Yii Forms

答案 1 :(得分:0)

<?php
echo CHtml::activeCheckBoxList($model, 'categories',
        CHtml::listData(GiftCategory::model()->findAll(), 'id', 'title'),
        array('checkAll' => ' Select All'));
?>