我有2个实体,用户和个人资料。 Profile与User具有in-symfony关系,但没有数据库内关系(没有外键,没有级联) - 只有名为user_id的简单int列,仅此而已。
问题很明显:当我删除用户关联的配置文件时,但user_id指向不存在的用户行。
由于我在从数据库获取配置文件时使用in-symfony关系,因此它也会获取相关的用户实体。我希望如果没有具有特定ID的行,它将只留下null或至少抛出异常或其他东西。
问题是symfony只创建了id的空用户实体对象。其余字段为空。
我知道解决方案是创建FK,约束等...但我不允许触摸数据库模式中的任何内容。
我该如何处理这个问题?我甚至可以留下那些空对象,如果我只有简单的方法来确定它们是否存在于TWIG内的数据库中 - 所以我会知道我是否可以显示{{profile.user.email}}。
答案 0 :(得分:0)
正如您所问,快速而肮脏的解决方案是使用此测试:http://twig.sensiolabs.org/doc/tests/defined.html 但我强烈建议重新修改你的实体关系。
答案 1 :(得分:0)
找到解决方案:它的获取:EAGER设置为在学说中有问题的映射。
默认情况下,doctrine使用LAZY获取导致使用doctrine为相关实体生成的Proxy类的结果。该类与真实实体类几乎相同。区别在于getter方法之前,返回值之前从数据库执行获取实体。
此时,当您在此类代理上调用getter时,doctrine会尝试使用其ID在数据库中查找实体,并且因为它没有找到任何内容,因此会抛出异常。
当使用EAGER提取原则时,它在获取主实体的同时执行相关实体的提取,如果它没有找到它,则在关系字段上设置为null。