如何使用 Yii2 在 listBox() 中显示值以进行多项选择

How to display values in listBox() for multiple selection using Yii2

我正在使用 Yii2 创建博客。我有包含表的基本数据库结构: 帖子 类别 Posts_Categories

我正在使用 Yii2 ActiveForm 创建 post 创建表单。有Title(文本域)、Content(文本域)、Categories(多类别选择的列表框)输入域。

我无法用数据库值填充列表框。

<?php $form = ActiveForm::begin(); ?>

    <?= $form->field($model, 'Title')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'Content')->textarea(['rows' => 6]) ?>

    <?= $form->field($model, 'CategoryId')->listBox(\yii\helpers\ArrayHelper::map(\backend\models\Category::find()->all(),'CategoryId','CategoryName',['multiple' => true])); ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

它抛出以下错误:

Unknown Property – yii\base\UnknownPropertyException

Getting unknown property: backend\models\Category::1

列表框行有错误。其次,在列表框中填充数据后,如何处理关于 posts 和多类别关系的数据插入。

您在列表框中有语法错误。所以,在 multiple 属性.

之前完成结束括号 )

喜欢,

<?= $form->field($model, 'CategoryId')->listBox(\yii\helpers\ArrayHelper::map(\backend\models\Category::find()->all(),'CategoryId','CategoryName'),['multiple' => true]); ?>

关于数据插入问题的第二部分。您可能需要遍历列表框中选定(发布)项目的数组。这是一个可能包含在控制器文件的 actionCreate()actionUpdate() 函数中的示例(我假设 PostController.php):

$selectedList = $_POST['model_name']['CategoryId'];
if(isset($selectedList)) {
    foreach($selectedList as $value){
        $pcmodel = new Post_Categories(); //assumption on model name
        //do neccessary check here
        $pcmodel->post_id = $postmodel->id;
        //assumption that value is being stored
        $pcmodel->category_id = $value; 
        $pcmodel->save(); 
    }
}