2018-01-31 17:41:04 3101次浏览 2条回答 0 悬赏 30 金钱

我这里有大量数据插入的需求,我用了 \Yii::$app->db->createCommand()->batchInsert 这个方法来新增数据,
但数据的正确性又要求比较严格,我只能用 $model->validate() 模型规则来验证数据,但会慢很多,不知道yii2本
身是否有提供批量验证的方法呢,还是只能自己写。

  • 回答于 2018-02-01 01:41 举报

    采用 $modelrules 来验证不会慢,除非你有数据库表之类耗费性能的判断,比如 unique 规则

    示例:

    <?php
    $inserts=[
        [
            'test',177,
        ],
        [
            'test2',117,
        ],
        ...
    ];
    $model = new TestModel();
    foreach($inserts as $insert){
        $model->name = $insert[0];
        $model->height = $insert[1];
        if(!$model->validate()){
            throw new \Exception('invalid data');
        }
    }
    $columns = ['name','height'];
    \Yii::$app->db
              ->createCommand()
              ->batchInsert('table',$columns,$inserts)
              ->execute();
    
    4 条回复
    回复于 2018-02-01 09:31 回复

    用model规则就相当与每行都会对数据库进行查询,这速度当然会受影响

    回复于 2018-02-01 10:13 回复

    model 规则是否对数据库进行查询取决于你用的是什么规则,而不是什么 每行都对数据库进行查询,建议你自己查看 debug 栏中的 db 选项,一试便知。

    回复于 2018-02-01 11:19 回复

    恩,我没说清楚,我要新增的数据和其他表有关联的,用的规则肯定要查数据库,这个必须要验证的

    回复于 2018-02-23 20:12 回复

    你这个格式我给九分

  • 回答于 2018-03-05 10:29 举报

    yii\base\Model::validateMultiple()?

    1 条回复
    回复于 2018-03-05 14:51 回复

    看了下实现方式就是foreach循环啊,这跟自己循环好像没什么区别,效率没提升

您需要登录后才可以回答。登录 | 立即注册
wsd15321
见习主管

wsd15321

注册时间:2017-11-08
最后登录:2019-06-13
在线时长:3小时12分
  • 粉丝0
  • 金钱255
  • 威望20
  • 积分485

热门问题