我有一个帖子表格,我在每个帖子中创建一个博客文章是一个类别列表,使用下拉列表列表填充了我的类别表中的记录。当我选择并提交表单时,它会填充名为CategoriesReviews的连接表,其中包含帖子ID和类别ID。
问题
如何使用相同的下拉列表创建更新表单,但是在列表中预先选择了已选择的类别?
查看
<?= $form->field($categories, 'categories_id')->dropDownList(
ArrayHelper::map(Categories::find()->all(), 'id', 'title'),
['prompt'=>'Select...', 'multiple' => true]);
?>
控制器
foreach ($_POST['CategoriesReviews']['categories_id'] as $category){
$category = new CategoriesReviews();
$category->post_id = $model->id;
$category->category_id = $category;
$category->save();
}
答案 0 :(得分:0)
您正在使用yii\widgets\ActiveField
,这意味着字段的值与模型值同步。您只需要将category_id
属性填充为更新时的实际值(在您的现有分配类别的数组中),它们将自动预选。
接下来,您将数据保存错误。
首先,您应该使用\Yii::$app->request->post()
抽象。接下来,需要检查$_POST['CategoriesReviews']['categories_id']
是否存在,至少isset
。
但这不是你处理模型数据加载和保存的方式。并且联结表数据的处理方式不同。您需要定义关系并使用link()
方法,例如:
$order->link('items', $item);
official docs中提供了更多信息和示例。
这是开箱即用的方式,或者你可以使用一些扩展来简化多对多的工作: