yii2更新表单基于模型的预选下拉选项

时间:2016-01-14 23:13:45

标签: php jquery mysql yii2 yii2-advanced-app

我有一个帖子表格,我在每个帖子中创建一个博客文章是一个类别列表,使用下拉列表列表填充了我的类别表中的记录。当我选择并提交表单时,它会填充名为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(); 
}

1 个答案:

答案 0 :(得分:0)

您正在使用yii\widgets\ActiveField,这意味着字段的值与模型值同步。您只需要将category_id属性填充为更新时的实际值(在您的现有分配类别的数组中),它们将自动预选。

接下来,您将数据保存错误。

首先,您应该使用\Yii::$app->request->post()抽象。接下来,需要检查$_POST['CategoriesReviews']['categories_id']是否存在,至少isset

但这不是你处理模型数据加载和保存的方式。并且联结表数据的处理方式不同。您需要定义关系并使用link()方法,例如:

$order->link('items', $item);

official docs中提供了更多信息和示例。

这是开箱即用的方式,或者你可以使用一些扩展来简化多对多的工作: