Почему в базу записывается запись два раза?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
detected
Сообщения: 174
Зарегистрирован: 2017.06.16, 12:24

Почему в базу записывается запись два раза?

Сообщение detected » 2017.08.27, 10:18

Пояснение:
Импорт прайсов, задача: пользователь должен сам выбирать какие столбцы куда записывать.
$value - массив товаров
$colnums - массив столбцов
Цикл показывает нужное кол-во оборотов, почему он записывает два раза?
for($i=0; $i<count($value); $i++)
{
$model = new ShtPricelist();
$model->products = $value[$i][$colnums[0]];
$model->price = $value[$i][$colnums[1]];
if(!$model->save())
{
print_r($model->getErrors()); exit;
}


}


urichalex
Сообщения: 957
Зарегистрирован: 2015.08.07, 11:03

Re: Почему в базу записывается запись два раза?

Сообщение urichalex » 2017.08.27, 12:15

Код формы и контроллера покажите

detected
Сообщения: 174
Зарегистрирован: 2017.06.16, 12:24

Re: Почему в базу записывается запись два раза?

Сообщение detected » 2017.08.27, 18:28

public function actionListv($d, $code)
{
$file = Yii::$app->request->get('d');
$code = Yii::$app->request->get('code');
$handle = fopen($file, 'r');
$colnums = explode(',', $code);
$value = array();
if ($handle) {
// include('simple_html_dom.php');
while (($row = fgetcsv($handle, 10000, ";")) != FALSE) {
//if (in_array("v_products_name_1", $row)) continue;
ini_set('memory_limit', '100512M');
//Массивы, которые содержат столбцы для парсинга
$value[] = [
'0' => $row[0],// продукция
'1' => $row[1],//цена

];

}
}
return $this->render('listv', ['file' => $file, 'value' => $value, 'code' => $code]);
}

Форма

<div class="import-index">
<?php
$array = [];
$array[] = $value_element_content[0]['product'].",".$value_element_content[0]['price'];
$s = explode(',',$array[0]);
?>
<?php $form = ActiveForm::begin(['options'=>['enctype'=>'multipart/form-data' ],'method'=>'POST'] ); ?>
<?= $form->field($model, 'file')->fileInput() ?>
<?= $form->field($model, 'products')->dropdownlist($s)->label('Продукция') ?>
<?= $form->field($model, 'price')->dropdownlist($s)->label('Цена') ?>
<div class="form-group">
<?= Html::submitButton('Получить список', ['class' => 'btn btn-success']) ?>
</div>
<div class="form-group">
</div>
<?php ActiveForm::end(); ?>
<button id="import_">Импорт</button>

</div>

<a href="<?= yii\helpers\Url::to(['/import/listv/', 'd' =>$model->file_import])?>" id="imports">null</a>
<?php
$script = "
$('#import').on('click', function(){

var array = [];
array += $('#contentelement-products').val()+',';
array += $('#contentelement-price').val();

$.ajax({
type: 'GET',
url: '/backend/web/import/list',
data: {'array':array},
success: function (data) {
console.log(data);
}
});
});
$('#import_').on('click', function(){
var array = [];
array += $('#contentelement-products').val()+',';
array += $('#contentelement-price').val();

var getvalue = $('#imports').attr('href');
console.log(window.location.href);
location.href = getvalue+'&code='+array;
});
";
$this->registerJs($script, \yii\web\View::POS_END);
?>

detected
Сообщения: 174
Зарегистрирован: 2017.06.16, 12:24

Re: Почему в базу записывается запись два раза?

Сообщение detected » 2017.08.27, 18:44

Проблема решена, фаербагом нашел два вызова, один в методе при передаче данных на рендер, второй в самом виде, вывод: пользуйтесь фаерагом и работайте с логикой в контроллере, а не в виде

Ответить