BoraN7 Exception fırlatmadan kayıt yazmama gibi bir durumun olabilmesi için modelin doğal oluşma yollarında oynama yapmış olmanız lazım, mesela saving/creating olaylarında işlem yaptırmak ve false döndürmek. Eğer modelde bir oynama yapmadıysanız ya exception fırlatır (veritabanı düzeyinde bir hata almışsınızdır) ya da kaydeder, ya true'dur ya da exception verir.
saveOrFail() zaten transaction içinde kaydetme:
/**
* Save the model to the database using transaction.
*
* @param array $options
* @return bool
*
* @throws \Throwable
*/
public function saveOrFail(array $options = [])
{
return $this->getConnection()->transaction(function () use ($options) {
return $this->save($options);
});
}
Kendisi özel bir exception fırlatmaz, sadece mevcut transaction içinde exception meydana gelmişse onu fırlatır, sorgu gerçekleşmez.
$blogPost = BlogPost::findOrFail(1);
// If kontrolü yapmanın anlamı yok çünkü deleting olayına müdahele etmemişseniz delete daima true döner
// If şartı daima çalışır, hata olursa false dönmez veritabanı düzeyinde exception alırsınız
if($blogPost->delete()) {
// ...
}
Yani kısaca modelin saving, creating, updating ve deleting olaylarına müdahele etmediyseniz, bir şekilde içlerinde işlem yaptırıp false dönmüyorsanız bu işlemler daima ya true döner ya da exception fırlatır, false dönme durumu yok. Bu durumda if kontrolü yapmanıza gerek yok.