【发布时间】:2017-05-15 07:09:15
【问题描述】:
我正在尝试找到一种方法来查找特定实体的关系,比如要删除的实体。
示例设置:
-
Country实体可以有多个Currencies。 -
Currency实体可以有Countries。 -
Country可能有一个主要的Currency。
因此,设置为:Country <-> (1-n) <-> CountryCurrency <-> (n-1) <-> Currency。
在上面的示例中,很容易找到要删除的国家/地区是否有任何关联的货币。
但是,假设以上内容是以全局方式设置的,并且可用于应用程序中的其他模块。
如果另一个模块,例如Address,在单向关系中使用了一个国家(Address 有一个Country):我如何才能确定特定的Country 实体可能不尝试就不会被删除,因此会收到Foreign Key constraint 错误?
我希望 Doctrine 有内置的东西,但在文档中找不到它。谷歌搜索了一段时间也没有成功。始终处于以下趋势:“好吧,您只需 $entity->getSomeRelation()->count() > 0 就知道了”,但我正在寻找可以适用于任何实体的通用解决方案/方法。
【问题讨论】:
-
搜索“php 学说元数据”。元数据描述了所有的关系。我对您的方法在实践中的实际效果持怀疑态度,但信息就在那里。
-
有趣的信息,忘记了。但是,对于我的用例来说,这是错误的方式。将其应用于我的问题中的案例时,我看到我正在删除的
Country中的所有信息。我没有看到与在其单向关系中使用Country的Address相关的结果。 (如associationMappings属性中的ClassMetadata实体中所见 -> 包含Country#coordinates和Country#countryCurrencies的链接)。如果您有其他想法,我很乐意为您指明正确的方向。 -
我想您可以尝试使用 Doctrine Database Abstraction Layer 模式工具直接检查 sql 数据库中是否存在外键约束。 docs.doctrine-project.org/projects/doctrine-dbal/en/latest/… 但我仍然怀疑你的整个方法。你真的认为你会遇到这样的问题吗?只设置一个配置变量怎么样?
标签: zend-framework doctrine-orm zend-framework2