deathisonitsway wrote:mgsmus wrote:Ben silme işleminden önce bağlı kayıt olup olmadığını kontrol ettiriyorum. Bağlı kayıt varsa her zaman olmasa da silinmesine izin vermiyorum, önce alakalı kayıtların silinmesi gerektiğine dair bir uyarı mesajı gösteriyorum.
$user= User::findOrFail($id);
if($user->products()->count()) {
return response()->json([
'message' => 'Kullanıcıyı silebilmek için önce kullanıcıya ait ürünleri silmeniz gerekiyor'
]);
}
$user->delete();
gibi
hocam böyle spesific message vermek için olabilirde.5-6 table olunca can sıkar bu ifler.bir event gibi modelde calıstırılamıyor mu bunlar.delete gelince bunlara baksın.
öbür türlü foreign key on_delete(cascade) yoksa zaten silmeyecek ama spesifik mesaj icin @evrend in yolu izlenebilir sanki.
ek olarak hard delete yapmak kaldı mı ki

en iyi yol soft delete diye dusunuyorum.
foreign key ile silme işlemi SQL düzeyinde olan bir işlem olduğu için uygulama yapısı tarafında artık bırakma ihtimali yüksek. Kontrollü bir silme yöntemi değil. Pivot tablo kayıtlarının silinmesinde kullanışlı belki ama bazen bir model başka bir modele, o da başka bir modele bağlı oluyor, o son modelin de sistemde kayıtlı fiziksel dosyaları oluyor. Bu gibi durumlarda kontrollü silme işlemi yapmanız gerekiyor. Ben yine de foreign key kullanıyorum ama performans gerekçesiyle, sonuçta o da bir index oluşturuyor. Özellikle muhasebe programları gibi programlarda silmeye sondan başlanır, ta ki ana kayıt bağımsız oluncaya kadar, en son ana kayıt silinir.
Benim verdiğim örnek Model event ile yapılabilir elbette ama ben Model'e Response karıştırmak istemem, biri database katmanına ait, diğeri HTTP katmanına ait. Bunu daha çok her ikisini de kullanan bir Service ile halletmeyi düşünürdüm sanırım.
Soft delete olayı veritabanı düzeyinde unique kayıtlar bulundurmadığınız taktirde iyi bir yöntem olabilir.
Daha önce de dediğim gibi bu iş denge işi, neyi kullanıp kullanmayacağınızı proje belirleyecek.