Сделал перенос данных из одной таблицы в другую, перносится только одно значение из 3х

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

Сделал перенос данных из одной таблицы в другую, перносится только одно значение из 3х

Сообщение riaron »

Код: Выделить всё

<?php
use yii\helpers\Url;
use app\models\Orders;
use app\models\Orderid ;
use yii\widgets\ActiveForm;
use yii\helpers\Html;
use app\models\Basket;
$at=0;
foreach ($basket as $bask){$at+=$bask->good_qtty*$bask->price;}
if(!$user=Yii::$app->user->identity->username){$user=Yii::$app->request->userIP;}
$phone = filter_input(INPUT_POST, 'phone');
$submitt = filter_input(INPUT_POST, 'submitt');

$a=generateCode(15);
if(isset($submitt)){
    $phone = filter_input(INPUT_POST, 'phone');
        $modell = new Orderid();

    $model = new Orders();
    $a=generateCode(15);
    for($i=1;$i<=Basket::find()->where(['user'=>$user])->count();$i++){
        $bask=Basket::find()->limit($i)->one();
        $model->name=$bask->name;
        $model->user=$bask->user;
        $model->good_id=$bask->good_id;
        $model->producer=$bask->producer;
        $model->price=$bask->price;
        $model->good_qtty=$bask->good_qtty;
        $model->goodtype=$bask->goodtype;
        $model->phone=$phone;
        $model->orderdate=date("Y.m.d H:i:s");
        $model->orderid=$a;
        $model->save();



    }$modell->orderid=$a;
        $modell->save();
            //Basket::deleteAll(['user' => $user]);

    }
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Сделал перенос данных из одной таблицы в другую, перносится только одно значение из 3х

Сообщение andku83 »

riaron писал(а): 2019.01.10, 16:10

Код: Выделить всё

<?php
...
    for($i=1;$i<=Basket::find()->where(['user'=>$user])->count();$i++){
...
Зачем в цикле запрашивать количество?!
riaron писал(а): 2019.01.10, 16:10

Код: Выделить всё

<?php
...
        $bask=Basket::find()->limit($i)->one();
...
Этим запросом вы всегда получаете один и тот же объект.

Делайте:

Код: Выделить всё

	...
        $baskets = Basket::find()->where(['user'=>$user])->all();
	foreach($baskets as $basket) {
		$order = new Order(); // у вас какая-то каша с Orderid и Orders ?!
		$order->attributes; // заполняете данными 
		...
		if (!$order->save()) {
			var_dump($order->errors);
		}
	}
	...
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Сделал перенос данных из одной таблицы в другую, перносится только одно значение из 3х

Сообщение bemulima »

У вас в коде в цикле всё время одну и ту же корзину обновляете

Код: Выделить всё

$bask=Basket::find()->limit($i)->one();// вместо лимита дать условие where(["id_user" => $id_user])
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Сделал перенос данных из одной таблицы в другую, перносится только одно значение из 3х

Сообщение andku83 »

bemulima писал(а): 2019.01.11, 18:03 У вас в коде в цикле всё время одну и ту же корзину обновляете

Код: Выделить всё

$bask=Basket::find()->limit($i)->one();// вместо лимита дать условие where(["id_user" => $id_user])
Для этого запроса такое where ничего не изменит, либо получить все и походить по списку (как показано выше), либо использовать offset.
Второй способ не рекомендую из-за лишних обращений к БД.
Ответить