2017-01-06 19:40:42 2801次浏览 4条回答 0 悬赏 10 金钱

如题:如何用model插入二条数据? 我发现如果不new 二次model 是做不到的。这是orm的特性?
今天项目中,$this->save() 在一次操作中调用了四次。但发现不管如何,都只有一条入库。

最佳答案

  • koko 发布于 2017-01-06 21:45 举报

    第一种方法

    php
    $model = new User();
    foreach($data as $attributes)
    {
         $_model = clone $model;
         $_model->setAttributes($attributes);
         $_model->save();
    }
    

    第二种方法

    php
    $model = new User();
    foreach($data as $attributes)
    {
          $model->isNewRecord = true;
          $model->setAttributes($attributes);
          $model->save() && $model->id=0;
    }
    
    1 条回复
    回复于 2017-01-07 15:40 回复

    koko,你好,我看你使用的是clone,我一般都是new,并unset($model),你这么的做的话,$_model最终会有几个?

  • 回答于 2017-01-06 21:36 举报

    这是orm的特性

  • 回答于 2017-01-06 22:40 举报

    同意楼上,也可以两条数据拼成一条sql语句,然后执行
    类似于如下:

    foreach($res[0] as $value){
        $row = explode('|', $value);
        if($row[0] != '' && isset($row[1])){
            $values .= '("'.trim($row['0']).'","'.trim($row['1']).'"),';
        }
    }
    
    $sql = "insert into tbl_index(title,link) values".substr($values,0,-1).';';
    
    5 条回复
    回复于 2017-01-07 09:40 回复

    嗯,因为之前入过一坑,所以知道怎么处理。只是觉得这个问题有些特别。一是确认下。二是想看看有没有大神解释下为什么会出现这种情况

    回复于 2017-01-07 10:20 回复

    ,贴出来代码看看

    回复于 2017-01-07 10:32 回复

        public function getAdd()
        {
            $this->a();
            $this->b();
            $this->c();
            $this->d();
        }
    
    

    简单的来说,每一个方法,都是一个插入操作。$this->sve();但是只有d()能入库。

    以下是我解决方法:
    注:因为我在入库前,做了时间判断,所以好使。

    
      for ($i = 0; $i <= 3; $i++) {
                $model->add;
            }
    
    

    代码意义不大。

    回复于 2017-01-07 10:39 回复

    我认为你这里可以分别dump一下四个$this

    回复于 2017-01-07 11:28 回复

    就是四个一样的object 有问题?

  • 回答于 2017-01-07 11:49 举报

    建议批量插入好点,如:

    //假如 $names = ['zhangsan', 'lisi']; 
    $data = []; 
    foreach ($names $k => $v) { 
        $data[] = [$v]; 
    } 
    Yii::$app->db->createCommand()->batchInsert('test', ['name'], $data)->execute(); 
    
    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
最爱红烧肉
副总裁

最爱红烧肉

注册时间:2014-11-07
最后登录:2017-10-27
在线时长:69小时2分
  • 粉丝11
  • 金钱4740
  • 威望30
  • 积分5730

热门问题