Привет. Итак:
1. Есть таблица Товар
2. Есть таблица Тех. характеристики
Вот модель тех. характеристик:
class ProductTechSpec extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'product_tech_spec';
}
public function attributeLabels()
{
return [
'id' => 'primary key',
'product_id' => 'primary key',
'title' => 'заголовок',
'spec' => 'описание',
];
}
public function getProduct()
{
return $this->hasOne(Product::className(), ['id' => 'product_id']);
}
public static function find()
{
return new ProductTechSpecQuery(get_called_class());
}
}
Вот что удалось собрать на просторах форумов:
public function actionCreate()
{
$model = ['product' => new Product(), 'product_tech_spec' => [new ProductTechSpec()]];
$count = count(Yii::$app->request->post('Setting', []));
for($i = 1; $i < $count; $i++) {
$model['product_tech_spec'][] = new ProductTechSpec();
}
if ($model['product']->load(Yii::$app->request->post()) && $model['product']->save()) {
if (Model::loadMultiple($model['product_tech_spec'], Yii::$app->request->post())){
Model::validateMultiple($model['product_tech_spec'],true);
foreach ($model['product_tech_spec'] as $tech_spec) {
$tech_spec->product_id = $model['product']->id;
$tech_spec->save(false);
}
return $this->redirect(['view', 'id' => $model['product']->id]);
}else{
return $this->render('create', [
'model' => $model,
]);
}
}else{
return $this->render('create', [
'model' => $model,
]);
}
}
Но, есть одно «но»:
Сохраняет только последнюю техническую характеристику, в чем ошибка?
P.S. Как проводить валидацию для сгенерированных во view полей отдельно для каждого? Для модели если заполнить одно поле, все остальные автоматически становятся валидны.