鍍金池/ 問答/PHP/ YII2模型層添加數(shù)據(jù)為什么沒反應(yīng)?

YII2模型層添加數(shù)據(jù)為什么沒反應(yīng)?

在寫進(jìn)銷存的時候,在入庫的時候需要把商品加到倉庫中。代碼如下

   public function actionCreate()
    {
        $model = new Goods();
        $model->sku = strtoupper(uniqid());
        $model->datetime = time();
        $model->admin_id = Yii::$app->user->id;

        if ($model->load(Yii::$app->request->post())) {
            $cost = $model->cost_price;
            $number = $model->numbers;
            $model->total = $cost * $number;
            $models=ArrayHelper::toArray($model);
            if ($model) {
                $model->save();
                $models->add($models);
                return $this->redirect(['view', 'id' => $model->id]);
            }

        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }

這是添加到入庫表的,$models->add($models);是添加到倉庫表模型層的方法

  public function add($data)
    {

        foreach ($data as $k=>$v)
        {
            $asku = Warehouse::find()->where(['sku'=>$v['sku']])->one();
            $askuCount = Warehouse::find()->where(['sku'=>$v['sku']])->count();

        }
        if (!$askuCount)
        {
            $Warehouse=new Warehouse;
            $Warehouse->datetime=time();
            $Warehouse->cid=$data['cid'];
            $Warehouse->name=$data['name'];
            $Warehouse->sku=$data['sku'];
            $Warehouse->counts=$data['numbers'];
            $Warehouse->price=$data['price'];
            $Warehouse->flag=1;
            $Warehouse->save();
        }else{
            $asku->counts += $data['numbers'];
            $asku->timeLastOp=time();
            $asku->save();
        }
    }

可以打印出數(shù)據(jù),但是不知道為什么添加之后不能再Warehouse這個表中添加數(shù)據(jù),有人知道嗎?剛用框架兩天,不是很懂。

回答
編輯回答
嘟尛嘴

目前問題的解決方法:
把 if (!$askuCount) 的代碼放到循環(huán)中即可插入數(shù)據(jù)

建議:
不要用循環(huán)操作數(shù)據(jù)庫,建議用批量插入

2018年4月30日 19:43
編輯回答
尐潴豬

add 方法里 foreach$askuCount 這個變量是只存了最后一次循環(huán)結(jié)果吧,你循環(huán)外判斷這個不應(yīng)該是 += 的結(jié)果嗎?或者說你把 if 判斷放循環(huán)里。

2017年9月22日 14:37
編輯回答
筱饞貓

你這樣是修改數(shù)據(jù),new Warehouse()才是新增。另外,循環(huán)之內(nèi),盡量別寫sql語句。

2017年5月9日 11:17
編輯回答
殘淚

model中有個對于存進(jìn)數(shù)據(jù)庫的校驗規(guī)則不知道你是否寫了。形如下面代碼:

public function rules()
    {
        return [
            [['user_id', 'bag_id', 'create_time'], 'required'],
        ];
    }

你的每一個字段都要寫到里面去,如果不需要驗證的可以直接都是用safe

一般驗證不通過,或者沒有驗證,Yii不會將數(shù)據(jù)插入數(shù)據(jù)庫,除非數(shù)據(jù)庫報錯,否則不會報錯。所以,你需要檢測一下save的返回值,如果是false,那么你可以使用$model->getErrors()來獲取一下到底報了什么錯誤。

2017年10月4日 02:48
編輯回答
歆久

請了解ORM
Yii2的模型操作數(shù)據(jù)庫 返回的是一個對象 如果你放在循環(huán)中 這個對象一直指向的是第一個成功插入的那條記錄
以后再用來操作 就是更新操作
新版本的tp5.0也借鑒了此種思想

2018年7月24日 21:54
編輯回答
貓小柒

謝邀,沒用過yii2,你可以看看框架日志,看看執(zhí)行的sql是怎么樣的

2017年5月13日 13:07