PHP ile anlamlı UI hataları dönmek yabancı anahtar kısıtlamaları kullanabilirsiniz

3 Cevap php

Ben yabancı tuşlarını kullanarak büyük bir hayranıyım ve kimsesiz veri ile dolu olan benim veritabanı tutmak bile küçük projeler üzerinde bunları kullanmak için bir eğilim var olduğunu söyleyerek başlamak istiyorum. Veri 10 katmanları - büyük projelerde ben 8 yukarı kapsayan sona tuşları Gobs ile sonuna kadar.

Ben Herkes son kullanıcı için anlamlı mesajlar kurabileceği bir şekilde MySQL veritabanı 'beklenen hataları' ele zarif bir yol önermek eğer bilmek istiyorum. Ben bir örnek 'ile beklenen hataları' açıklayacağız.

Ben temel tartışmalar için kullanılan tablolar seti var diyelim:

discussion
questions
responses
users

Hiyerarşik muhtemelen böyle bir şey olacaktır:

-users
--discussion
---questions
----responses

Bir kullanıcıyı silmek çalıştığınızda FKs tartışmaları kontrol edecek ve herhangi bir tartışma silme soruları silme, tartışma çekler soruları silme, kısıtlı varsa yanıtları denetler. Bu durumda bir 'beklenen hata' Bir kullanıcıyı silmek için çalışıyor olurdu - onlar yeni bir ya da daha fazla yabancı anahtarlar bir hataya neden başarısız olacağını tahmin oluşturduğunuz sürece.

Ne yapmak İSTİYORUM silinmesi o hatayı yakalamak ve benzeri son kullanıcı bir şey söylemek mümkün değildir 'Üzgünüz, ancak bu kullanıcıyı silebilirsiniz önce tüm tartışmalar kaldırılması gerekir ...'.

Şimdi ben tutmak ve korumak eşleşen diziler PHP ve iletilerine özgü hataları eşleyebilirler biliyorum ama bu dağınık ve durgun olma eğilimli, ya da ben elle silme denemeden önce seçtiği bir dizi çalıştırabilir, ama sonra ben gibi yapıyorum FKS kullanmadan gibi çok iş.

Herhangi bir yardım büyük takdir ya da ben sadece bu tamamen yanlış bakıyorum eğer bana bildirin lütfen olacaktır.

Bir yan not Ben genelde uygulama geliştirme için CodeIgniter'ı kullanmak, böylece o çerçeve ile bir yol açmak istiyorum eğer cevapları düşünün lütfen.

Şimdiden teşekkürler

3 Cevap

Ne yazık ki, MySQL, SQL Server veya Oracle ile yaptığınız gibi özel bir hata tanımlamak için yeteneği göstermiyor.

Workaround


Bu kontrol blog post about using a UDF to be able to define custom errors.

Eğer ON DELETE CASCADE ile yabancı anahtarları tanımlamak gerekir gibi geliyor. Bu, diğer tablolarda herhangi başvurulan verileri silecektir.

Eğer uygulama kodu için hatalarını oluşturmak için veritabanı üzerinde güvenmek gerekir. FK adlı app kod işler karışıyor ve bu olmamalıdır şey silmeye çalıştığında için vardır.

Eğer gerçekten kullanıcıya güzel bir hata mesajı vermek isterseniz, önce seçer çalıştırmak zorunda ve uygun hata mesajı inşa edecek.

edit

Seçtiğiniz bir yabancı anahtarları kontrol edebilirsiniz. Eğer doktrin gibi bir ORM kullanıyorsanız, hatta sadece o sıfırdan farklı satırlar için her tabloyu kontrol seçmek ne alanları söylemek, katılmak belirtmek zorunda değilsiniz.