Php Laravel多态关系/模型观察者和数据库完整性

Php Laravel多态关系/模型观察者和数据库完整性,php,laravel,relational-database,polymorphism,Php,Laravel,Relational Database,Polymorphism,使用laravel的多态关系时保持数据库完整性的最佳实践是什么 我正在使用模型观察员更新/删除相关模型。例如,我在删除客户时删除“已删除”事件中的相关文档。 这意味着,如果在删除第一个文档时发生错误,其余文档将保留在数据库中。。。或者,如果在事务中包装文档删除,则在删除父对象时,所有文档都将保留在数据库中…不幸的是,对于该问题没有好的答案。由于多态关系,无法使用外键保持数据库的完整性 一种尝试方法是使用数据库触发器。由于Laravel多态系统在引用相关模型的表上保留一个“type”列,因此可以在

使用laravel的多态关系时保持数据库完整性的最佳实践是什么

我正在使用模型观察员更新/删除相关模型。例如,我在删除客户时删除“已删除”事件中的相关文档。
这意味着,如果在删除第一个文档时发生错误,其余文档将保留在数据库中。。。或者,如果在事务中包装文档删除,则在删除父对象时,所有文档都将保留在数据库中…

不幸的是,对于该问题没有好的答案。由于多态关系,无法使用外键保持数据库的完整性

一种尝试方法是使用数据库触发器。由于Laravel多态系统在引用相关模型的表上保留一个“type”列,因此可以在可以变形的表上放置一个“before delete”触发器,以删除引用要删除的原始数据的所有事件

例如,使用中使用的结构:

您可以在执行查询的
staff
表上放置一个“before delete”触发器(此处为PostgreSQL语法),如下所示:

DELETE FROM photos WHERE imageable_id = OLD.id AND imageable_type = 'staff'
这样,每次删除员工原始照片时,所有引用的照片都将在同一事务中删除

我真的不知道这是否是保持这种关系完整性的最好方法,但这似乎是一种有效的方法

DELETE FROM photos WHERE imageable_id = OLD.id AND imageable_type = 'staff'