BoraN7 Amaç işlem yapmasını engellemek. Hata almanız normal çünkü hata kontrolü yapacak şekilde kod yazmıyorsunuz, exception kontrolü yok... Zaten bir uygulamada demo modu olup olmayacağı en başta belirlenir ona göre kodlanır. Sonradan yapılan bir şey değil.
Aldığınız hata PDOException fırlatıyordur diye tahmin ediyorum. app/Exceptions/Handler.php içinde render yönteminde
public function render($request, Throwable $exception)
{
if ($exception instanceof PDOException) {
// yapılacak işlem
// mesela return redirect()->back()->withErrors('Demo modda işlem yapamazsınız')
}
return parent::render($request, $exception);
}
deneyebilirsiniz ama ajax işlem yapıyorsanız javascript için de ayrı bir kontrol yapmanız gerekecek.
Diğer bir yol olarak da global event listener kullanarak creating, updating ve deleting olaylarında işlem yaptırmak. Bunun için app/Providers/EventServiceProvider.php, boot() yöntemi içinde:
public function boot()
{
parent::boot();
$events = ['creating', 'updating', 'deleting'];
foreach($events as $event) {
Event::listen("eloquent.{$event}: *", function ($model) {
// yapılacak işlem
});
}
}
deneyebilirsiniz.
Elbette bu model kullandığınız yerde çalışacak. Direkt DB facade ile işlem yaptıysanız oralarda çalışmayacak. DB olayları da dinlenebilir ama istemediğiniz sonuçlar doğurabilir, ayrıntılı bakmak lazım.
Event::listen('illuminate.query', function($query, $bindings, $time, $connections){
// Burada $query içinde INSERT, UPDATE, DELETE geçiyor mu diye bakıp işlem yaptırabilirsiniz
// diye düşünüyorum
});