2017-06-06 20:10:08 2269次浏览 8条回答 0 悬赏 20 金钱

models 下面 index.php
<?php
namespace Api\models;
use Yii;
use yii\db\ActiveRecord;
Index extends ActiveRecord
{

public static function tableName()
{
	return '{{%index}}';
}

/**
 * 添加消息
 */
public function add($data) 
{
    $this->setAttributes($data, false);
    var_dump($this->save());
    if($this->save()) 
		return Yii::$app->db->getLastInsertID();
	return false;
}

}
在控制里面操作
$indexDao = new Index();
$indexDao->add(['userId'=>1, 'idType'=>1, 'idVal'=>1, 'createTime'=>1496750748]);
$indexDao->add(['userId'=>2, 'idType'=>2, 'idVal'=>2, 'createTime'=>1496750748]);
同时插入两条数据 但只能第一条成果 第二条 第三条。。。无法插入了呢
把 add 方法改成

public function add($data) 
{
    return self::getDb()->createCommand()->insert('pao_index', $data)->execute();
}

就可以正常插入多天 啥情况呢?

最佳答案

  • 回答于 2017-06-06 22:38 举报

    你都new出来实例了,还想多次add是不行了,只能一次啊,如果想多条插入还用model的话,可以这样:

    $indexDao = new Index();
    $indexDao->add(['userId'=>1, 'idType'=>1, 'idVal'=>1, 'createTime'=>1496750748]);
    $indexDao = new Index();
    $indexDao->add(['userId'=>2, 'idType'=>2, 'idVal'=>2, 'createTime'=>1496750748]);
    
  • 回答于 2017-06-07 09:10 举报

    有个批量插入的方法不是

  • 回答于 2017-06-07 09:52 举报

    按照OO的规则,多次插入应该使用DAO模式或者静态方法吧,如果New过了,就无法插入多次了,我记得是这样,参见Yii的 UpdateAll方法

  • 回答于 2017-06-07 10:05 举报

    很明显,下面的代码是批量插入,必须成功

  • 回答于 2017-06-07 15:46 举报

    Yii的activeRecord模型有一个标记就是当前模型是否是新模型。当你new Index()的时候是一个新模型,save完成之后就会变成旧模型,save方法调用的时候会判断是旧的还是新的,如果是新的执行insert操作,如果是旧的会执行更新操作。如果想用模型的方法不断插入新纪录,需要循环初始化新模型,再赋值保存。是否是新模型参见方法BaseActiveRecord::getIsNewRecord();

  • 回答于 2017-06-09 12:10 举报

    学习了,YII道路漫长啊

  • 回答于 2017-06-12 17:04 举报

    66666666666666

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

路人甲

注册时间:2015-06-24
最后登录:2017-09-26
在线时长:11小时13分
  • 粉丝3
  • 金钱125
  • 威望0
  • 积分235

热门问题