У меня есть 2 модели (produkten и voorraad) и один контроллер (produkten).
Итак, я построил форму внутри продукта СрUD (создать / обновить).
Это пользовательская форма:
<div class="form-group">
<span class='btn btn-default addOption'>Optie toevoegen</span>
</div>
<div class='opties'>
</div>
<div class="form-group">
Verkrijgbaar als backorder?
<select name="backorder">
<option value="1">Ja</option>
<option value="0">Nee</option>
</select>
</div>
Это очень легко. Если вы нажмете на кнопку addOption
, это добавит несколько входных данных формы.
Теперь, когда форма сохраняется (здесь начинается проблема), она всегда будет добавлять данные из формы в базу данных. Но я не хочу этого. Я хочу, чтобы данные были проверены в первую очередь, если они уже существуют, если это так, они должны быть заменены и не добавляется снова.
Есть ли для этого функция yii или как мне это сделать?
Часть ProductenController:
foreach($_POST as $key => $value){
if(substr($key, 0,5) == 'maat_'){
$index_expl = explode('_',$key);
$index = $index_expl['1'];
$aantal = $_POST['aantal_'.$index];
$maten = explode(',',$value);
foreach($maten as $maat_key => $maat){
$kleuren = explode(',',$_POST['kleur_'.$index]);
foreach($kleuren as $kleur_key => $kleur){
$voorraad = new Voorraad();
$voorraad->product_id = $model->id;
$voorraad->maat = $maat;
$voorraad->kleur = $kleur;
$voorraad->aantal = $aantal;
$voorraad->backorder = (int)$_POST['backorder'];
$voorraad->save();
}
}
}
}
Заменить следующее:
$voorraad = new Voorraad();
с :
$voorraad = Voorraad::model()->findByPk($model->id); // assuming id is primary key, you can also use `findByAttributes`
if($voorraad == null) $voorraad = new Voorraad();
$voorraad->save();
также используется для обновления записи.
просто поместите скрытое поле ввода в вашей форме:
<div class="form-group hidden">
<input name="id" value="<?php echo YOURID;?>"/>
</div>
проверить, если id
существует на вашем сервере с empty()
, если не просто добавить, если существует, то обновите.