Ben yeni 5.2 için yeni ve postgres pgsql. Bir tablo (yanlış olabilir) benim anlayışıma göre buna uygun Log
Laravel 5.2 elverişli otomatik artış pgsql istisnası aynı kimlik üzerinde
class Log extends Model{
public $incrementing = true;
public $timestamps = false;
}
Schema::create('logs', function(Blueprint $table){
$table->bigIncrements('id');
$table->text('exception');
$table->dateTime('created_at');
});
logs
ve bir model adında var. id
verilmediyse, Eloquent son kullanılan id + 1'i (ancak buna karşı boş değil) kullanır. İlk Log
kaydediyorum, kesinlikle onun için 1 olacak ve sonraki için 2 olacak. Ben id=1
ile anlamlı save()
ile tek bir kayıt eklemiş Ama burada ben bir şekilde (el veya csv dosyası ile bir ekleme sorgusu ile) id 2,3,5,8
e.t.c. ile yeni kayıtlar eklerseniz sorun, gelir varsayalım masada. Ancak save
, Eloquent programatik olarak ikinci Log
kayıt/varlık için hala id = 2
'u ayarlar.
şimdi çözümü yukarıda bu
$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;
}
}
Watch gibi döngü saklıyorum benim için çalışıyor ve otomatik olarak (koşullarda yukarıda verilen) id = 4
ile kaydını ekler. 2 ve 3 için iki istisna atar ve yakalar.
Bu çözümü beğenmedim, lütfen bana başka bir şey önerin, neredeyse 2 gün boyunca döngü olmadan bir düzeltme arıyorum. Şimdiden teşekkürler. sütun adı ait mağaza işlevi almak maksimum ardından log_id: o zaman
Ör kurtarmak +1 eklemek o sütun maksimum değerini alır böyle bir daha sütun ekleme değer katmak gerekiyorsa
Evet, bu iyi. Ama bu seri veri tipinin yararını öldürecek. Şimdi bu şekilde görelim, Çok büyük bir veritabanında (milyonlarca kayıt), daha verimli ne olurdu? Max ('log_id') + 1; 'ya da 'catch' döngüsünü deneyin? Sanırım en iyisi daha iyi olabilir. –
Sorununuzu çözdünüz mü? – Hamelraj
evet, bu döngüden kaçınılarak, '$ l-> save();' öğesini kaydederek deneyin. ve yakalamada, önerilen yol. –