Моя проблема заключается в следующем.
Я пытаюсь вставить несколько элементов в таблицу базы данных mysql. Я использую виджет Kartik-Select2 для выбора предметов.
Следующий код работает для меня, и я могу выбрать несколько элементов с ним.
<?= $form->field($model, 'categories')->widget(Select2::className(), [
'data' => $model->availableCategories(),
'model' => $model,
'attribute' => 'categories',
'language' => 'en',
'options' => ['placeholder' => 'Select a site...'],
'pluginOptions' => [
'allowClear' => true,
'multiple' => true,
],
]) ?>
Но как теперь сохранить выбранные элементы в таблицу БД. Где хранятся выбранные элементы (есть ли какой-нибудь массив для них внутри виджета)?
Мой атрибут ‘category’ определен в классе Model как:
public $categories = [];
Я думал, что выбранные предметы будут заполнять его. Но это не работает (массив пуст после отправки формы). Я прочитал много похожих тем, но не нашел полного и полного объяснения, как это работает. Я новичок в Yii2 и, возможно, потерял что-то. Спасибо за любую помощь.
Обычно несколько выбранных элементов сохраняются таким образом (это упрощенный способ)
public function actionYourAction()
{
$post = Yii::$app->request->post();
if (!empty($post)){
$postModel = $post['YourModel'];
$postModelMulti= $postModel['your_multi_attribute'];
if ( !empty( $postModelMulti) ){
foreach ($postModelMulti as $key => $value) {
$newModel = new YuorModelToAdd();
$newModel->your_attribute = $value;
$newModel->save();
}
}
}
......
Других решений пока нет …