我试图想出一种更新模型的多个记录的方法,当我使用YiiBooster时,我看到你可以使用扩展网格进行批量操作。
我在网上找到的大多数示例都展示了如何使用Ajax删除多个记录,但我的要求略有不同。作为Yii的新手,我正在努力找到合适的解决方案。
基本上我有2个模型,一个父母和一个具有一对多关系的孩子。在子模型中,我有一个字段,使用父ID引用它所属的父项。
在应用程序的前端,用户应该导航到父更新视图,然后查看分配给该父级的所有子项的列表。我创建了一个模态窗口,显示所有子项的网格列表,可以执行批量更新操作。然后,这将为所选的所有子项分配父ID。
任何人都可以帮我解决这个问题,因为我不确定需要在扩展网格视图和控制器中编辑哪些内容来更新记录?
在我的父更新视图中,我使用renderPartial拉入子视图的索引视图,如下所示:
<?php $this->renderPartial('application.modules.children.views.childviews.addChild', array('dataProvider' => new CActiveDataProvider('Children'))); ?>
然后我的子索引视图中有一个扩展网格:
<?php
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
'type' => 'striped bordered',
'id' => 'children-grid',
'dataProvider' => $dataProvider,
'bulkActions' => array(
'actionButtons' => array(
array(
'buttonType' => 'link',
'type' => 'primary',
'size' => 'small',
'label' => 'Bulk Action',
'url' => array('batchUpdate'),
'htmlOptions' => array(
'class' => 'bulk-action'
),
'id' => 'child_id',
'click' => ''
)
),
'checkBoxColumnConfig' => array(
'name' => 'child_id'
),
),
'columns' => array(
'child_id',
'child_status',
'parent_id',
array(
'class' => 'bootstrap.widgets.TbButtonColumn',
'buttons' => array(
'update' => array(
'label' => '<i class="icon-user"></i> <span>View Child</span>',
'options' => array('class' => 'btn btn-small'),
'url' => 'Yii::app()->createUrl("children/update", array("id"=>$data->child_id))',
),
),
),
),
));
?>
我猜我需要某种onclick事件来调用控制器中的更新操作,此操作会将所有选定记录的parent_id列更新为当前父更新页面的父ID?
我希望有人可以提前帮助并多多感谢。
答案 0 :(得分:0)
而不是你在问题中所说的一对多关系,而是你真正想要多对多的关系。我之所以这么说,你似乎想要从拍卖的一组预定义属性中进行选择。在这种情况下,您将显示父(拍卖)和透视子(属性)列表,并使用复选框或类似的东西来指示透视子项的选择。您必须使用单独的数据模型来记录选择。我现在没有一个例子,但是我需要在我目前的Yii项目中做这样的事情,当我到达那里时我会写博客。