Laravel 5.2 eloquent在相同的id上保存自动增量pgsql异常

时间:2016-03-22 14:23:48

标签: php postgresql laravel eloquent plpgsql

我是laravel 5.2和postgres pgsql的新手。 我有一个名为logs

的表
Schema::create('logs', function(Blueprint $table){
                $table->bigIncrements('id');
                $table->text('exception');
                $table->dateTime('created_at');
            });

和相应的模型Log

    class Log extends Model{
        public $incrementing = true;
        public $timestamps = false;
}

根据我的理解(错误可能)。如果没有给出id,那么Eloquent将最后使用的id + 1(但不是null)放在上面。 如果我先保存Log,则肯定id为1,而下一个为2。 假设我只添加了一条带有save()

的Eloquent id=1的记录

但问题出现了,如果我以某种方式(手动使用插入查询或使用csv文件)添加标识为2,3,5,8 e.t.c的新记录。在表中。但是以编程方式save, Eloquent仍为第二个id = 2记录/实体设置Log

我现在正在这样保存

$l = new Log();
$l->exception = "some exception";
$l->created_at = Carbon::now()->toDateTimeString();

while(true){
    try{
          $l->save(); //it auto increments the id on each try
          break;
    }catch(\Exception $e){
          continue;
    }
 }

观察循环,上面的解决方案适合我,它将自动添加id = 4的记录(给定上述条件)。它会抛出并捕获id 2和3的两个例外。

我不喜欢这个解决方案,请给我一些别的建议,我正在寻找一个没有循环的修补程序,将近2天。提前谢谢。

1 个答案:

答案 0 :(得分:1)

第一列自动增量如果您需要再添加一个列插入值,请将该列的最大值添加+1然后保存

例如:列名 log_id 然后在商店功能中最多使用 log_id 并添加 +1

$current_id = DB::table('logs')->max('log_id');

'log_id' => $current_id + 1,

或者将您的 id 列更改为整数,并采用最大值添加 +1