我是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()
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天。提前谢谢。
答案 0 :(得分:1)
第一列自动增量如果您需要再添加一个列插入值,请将该列的最大值添加+1然后保存
例如:列名 log_id 然后在商店功能中最多使用 log_id 并添加 +1
$current_id = DB::table('logs')->max('log_id');
'log_id' => $current_id + 1,
或者将您的 id 列更改为整数,并采用最大值添加 +1