Я создаю блог, используя Yii2. У меня есть базовая структура БД с таблицами:
Сообщений
категории
Posts_Categories
Я использую Yii2 ActiveForm для создания формы создания поста. Есть поля ввода для Заголовок (текстовое поле), Контент (текстовая область), Категории (список для выбора нескольких категорий).
Я не могу заполнить listBox значениями БД.
<?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
В строке списка есть ошибка. Во-вторых, после заполнения данных в списке, как я могу обработать вставку данных в отношении записей и отношений нескольких категорий.
У вас есть синтаксическая ошибка в listBox. итак, завершаем круглые скобки )
до 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();
}
}