【问题标题】:Facultative relation with Doctrine ORM与 Doctrine ORM 的兼性关系
【发布时间】:2010-07-04 18:11:23
【问题描述】:

在 Doctrine ORM 和 Symfony 中应该如何实现兼性的一对一关系?假设数据库中有一些文件夹。每个文件夹都可以有一个默认图标或在另一个表中表示的一些自定义图标。在模式文件中应该如何描述这种关系?如果给定的文件夹关系发生或不发生,我怎么知道?

我自己不得不猜测,但每个似乎都不太好:

1) 假设我在folder 表中用id 列和folder_icon_id 列定义folder_icon 表,并用外键链接这些列。如果folder_icon_id 包含NULL,则不会发生关系。如果它包含一些整数值,则它指向相应的文件夹图标。当我以这种方式实现它并尝试使用 $folder->getFolderIcon() 之类的东西来获取文件夹图标时,我得到了一个 FolderIcon 类的实例,其中字段设置为 null(我宁愿得到类似 NULL、FALSE 或 Doctrine_Null 的东西)。为什么会这样?如何检查返回的对象是否不是“真实”文件夹图标?

2) 假设我使用与之前类似的方法,但我将folder_icon 表的第一行定义为默认图标,这样每个没有选择任何自定义图标的文件夹都与第一行相关。在这种情况下,获取 FolderIcon 类的一些虚拟实例没有问题。但是,如果从数据库中删除自定义文件夹图标,则会出现问题,因为没有 onDelete 行为“SET 1”将使用已删除图标的任何文件夹与默认图标相关联。

这个问题应该如何解决?在模式文件中定义这种关系的正确方法是什么?

【问题讨论】:

    标签: symfony1 doctrine relation


    【解决方案1】:

    问题出在 getVariable 魔术方法上

    使用 $folder->folder_icon 并使用 isset() 测试该关系是否存在。阅读有关测试是否存在关系的原则网站文档,我目前在移动设备上,因此无法链接到它。

    【讨论】:

    • 太好了,这正是我想要的。所以我应该遵循描述模式的第一种方法,并使用 isset($folder->FolderIcon) 检查给定文件夹是否存在关系。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2012-10-27
    • 2013-09-02
    • 2021-02-23
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多