Делал по этому уроку: https://www.youtube.com/watch?v=eAg0LIrZDdk
Вот контроллер:
Код: Выделить всё
public function actionCreate()
{
$model = new Cart();
$modelsTorrent = [new Torrent()];
$model->added = date('d.m.Y');
$model->addedid = Yii::$app->user->id;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
//$oldIDs = ArrayHelper::map($modelsTorrent, 'id', 'id');
$modelsTorrent = Model::createMultiple(Torrent::classname(), $modelsTorrent);
Model::loadMultiple($modelsTorrent, Yii::$app->request->post());
//$deletedIDs = array_diff($oldIDs, array_filter(ArrayHelper::map($modelsTorrent, 'id', 'id')));
// validate all models
$valid = $model->validate();
$valid = Model::validateMultiple($modelsTorrent) && $valid;
if ($valid) {
$transaction = \Yii::$app->db->beginTransaction();
try {
if ($flag = $model->save(false)) {
/* if (! empty($deletedIDs)) {
Torrent::deleteAll(['id' => $deletedIDs]);
}*/
foreach ($modelsTorrent as $modelTorrent) {
$modelTorrent->cart_id = $model->id;
if (! ($flag = $modelTorrent->save(false))) {
$transaction->rollBack();
break;
}
}
}
if ($flag) {
$transaction->commit();
$model->image = UploadedFile::getInstance($model, 'image');
if ($model->image) {
$model->upload();
}
return $this->redirect(['view', 'id' => $model->id]);
}
} catch (Exception $e) {
$transaction->rollBack();
}
}
//return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
'modelsTorrent' => (empty($modelsTorrent)) ? [new Torrent] : $modelsTorrent,
]);
}
}
если я убираю эту строку: $valid = Model::validateMultiple($modelsTorrent) && $valid;
сохраняет, но сохраняет неправильно.
Если я добавляю один Item, то в таблицу записывается две записи, вместо одной, и вторая пустая... https://clip2net.com/s/3TG2430
А если два Item, записывается также 2 записи, причем вторая также пустая, а вместо Item1 записывается Item2
Если в модели [['dates', 'source', 'serii', 'atributes', 'name_link', 'link'], 'required'], комментирую эту строку, то белый экрана осле отправки нет, но все равно 2 items запимсывает (1 с данными, второй пустой)