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

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

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

   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,
            ]);
        }
    }

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

  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這個(gè)表中添加數(shù)據(jù),有人知道嗎?剛用框架兩天,不是很懂。

回答
編輯回答
嘟尛嘴

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2017年5月13日 13:07