Модель:
class Film extends FilmBase
{
public function getProducers()
{
return $this->hasMany(AllProducers::class, ['producer_id' => 'producer_id'])->viaTable('film_producers', ['film_id' => 'id']);
}
}
Контроллер:
public function actionUpdate($id)
{
$film = Film::findOne($id);
$allProducers = ArrayHelper::map(AllProducers::find()->all(), 'producer_id', 'producer');
$filmProducers = $film->getProducers()->all();
if ($film->load(Yii::$app->request->post())
&& $filmProducers->load(Yii::$app->request->post())) {
$isValid = $film->validate();
$isValid = $filmProducers->validate() && $isValid;
if ($isValid) {
$film->save(false);
foreach ($filmProducers as $filmProducer) {
$modelProducer = new FilmProducers();
$modelProducer->film_id = $film->id;
$modelProducer->producer_id = $filmProducer;
$modelProducer->save(false);
}
return $this->redirect(['film/view', 'id' => $id]);
}
}
Форма:
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($film, 'imgUpload')->fileInput() ?>
<?= $form->field($film, 'title')->textInput(['maxlength' => true]) ?>
<?= $form->field($film, 'preview')->textInput(['maxlength' => true]) ?>
<?= $form->field($film, 'description')->textarea(['rows' => 6]) ?>
<?= $form->field($filmProducers, 'producer[]')->widget(Select2::class, [
'data' => array_merge(["" => ""], $allProducers),
'language' => 'ru',
'options' => [
'placeholder' => 'Выберите режиссера...',
'multiple' => true
],
'pluginOptions' => [
'allowClear' => true
],
])->label('Режиссер'); ?>
<div class="form-group">
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
Ошибка: Call to a member function isAttributeRequired() on array
Вопрос: Как сделать в форме мультиселект, в котором отображались бы уже сохраненные в БД данные?
<?= $form->field($film, 'producer')->widget(Select2::class, ...
И сохранение данного поля придется делать ручками
Виртуальный выделенный сервер (VDS) становится отличным выбором
Интересует вопрос как можно реализовать задуманное: Пользователь нажимает кнопку "Сбор данных", на фоне запускается мой скрипт, он делает...
В $table->timestamps(); создает два поля: create_at , update_atНо они по дефолту равны 0
Хочу написать своего бота для группы, но он не отправляет сообщения