【问题标题】:Yaml parameters not working on symfony/doctrine entitiesYaml 参数不适用于 symfony/doctrine 实体
【发布时间】:2014-05-26 13:52:45
【问题描述】:

我有一个名为 Venues 的实体和其他名为 Users 的实体。每个 Venue 都有一个名为 User 的字段,该字段是该场所的所有者,并且是用户之一。另一方面,每个用户都有一个场地字段,包括他注册的原始场地。所以我正在尝试找出正确的 yml 配置。

在我有的场地.orm.yml 文件中

manyToOne:
    user:
        targetEntity: Users
        joinColumns:
                  User:
                    referencedColumnName: ID
        inverseJoinColumns:
                  ID:
                    referencedColumnName: User
        orphanRemoval: false

在 users.orm.yml 我得到了:

manyToOne:
    venue:
        targetEntity: Venues
        joinColumns:
                  Venue:
                    referencedColumnName: ID
        inverseJoinColumns:
                  ID:
                    referencedColumnName: Venue
        orphanRemoval: false

应用程序静默失败,停止视图的呈现,就在 form_start(form). 尽管我处于开发模式,但我无法看到网络分析器(像往常一样)。如果我从场地中删除字段用户,那么渲染就可以了。 请让我知道我缺少什么,因为我在学说或 symfony 文档下找不到合适的例子,我认为我误解了这个链接http://mnapoli.fr/doctrine-2-yaml-reference/提前谢谢;)

编辑 失败的原因是内存耗尽类型错误,所以这个 问题最初是通过将 php.ini 内存限制增加到 220MB 来临时解决的,但是由于我需要将其设置回 64MB 限制,我发现通过显式声明我的 formType 的所有类型和实体选项,内存开销显着减少。此外,我使用 formType 中的查询构建器限制了某些选择中可用的总选项。无论如何,我会期待任何针对节省内存的额外行动。我要去谷歌搜索任何选择选项lazyloader Symfony 组件...

【问题讨论】:

  • 如果它静默失败,最好的调试方法是启动终端并查看dev.log。最简单的方法是:tail -f app/logs/dev.log
  • 真的是一个不断变化的游戏技巧 ;) 所以结果在这里 dl.dropboxusercontent.com/u/1502052/dev.log ,我没有在那里找到线索......
  • 奇怪的事情 - 它似乎不包含任何 CRITICALERROR 条目:-/ 我假设您尝试在 tail 处于活动状态时运行该应用程序? :)
  • 我运行了应用程序,然后执行了tail命令,最后我只复制了与执行时间匹配的日志...
  • 我正在尝试找出我的错误,如果发现我会通知您,谢谢!

标签: symfony doctrine-orm yaml


【解决方案1】:
manyToOne:
    user: <-- CLASS MEMBER NAME
    targetEntity: Users
        joinColumns:
            user: <-- DATABASE COLUMN NAME
                referencedColumnName: id <-- DATABASE COLUMN NAME

确保您没有将class member name 误放在database column name 上。

另外,您原来的YAML 似乎比它应该的要复杂一些。据我所知,joinColumnsinverseJoinColumns 应该joined tabled (@ManyToMany) 的情况下一起使用,这显然不是你的情况。

它如此悄无声息地失败的事实表明存在一些严重错误,尽管我什至无法猜测它为什么不记录它。

编辑(真的很远):

您是否启用了xdebug?我只记得xdebugphp 内的递归级别限制存在一些问题,以静默方式终止。

如果您这样做,请参阅此问题以了解如何增加它: Increasing nesting function calls limit

【讨论】:

  • 之前尝试过,使用用户:targetEntity:用户 joinColumns:用户:referencedColumnName:ID 但结果仍然是半渲染视图顺便说一句感谢您的帮助
  • 当然,在 orm 进行任何更改后,我正在成功运行 db update 命令
  • 很好,我正在努力。我也有消息..来自开发日志 [2014-05-26 17:51:56] Emergency.EMERGENCY:允许的内存大小为 33554432 字节已用尽(尝试分配 107 字节)我在尝试执行清除缓存命令。所以我不得不手动清除缓存文件夹...
  • 是的,我启用了 XDebug ... 我想是的。我还检查了我在树枝版本上遇到的日期时间问题,github.com/fabpot/Twig/issues/1241 但事实并非如此......
  • 我刚刚将我的 php.ini memory_limit 从 32M 更改为 64M...恐怕不是正确的解决方案...而且我需要优化学说设置...做什么你觉得呢?
【解决方案2】:

在反面使用 mappedBy,在拥有方使用 inversedBy。

venue.orm.yml

manyToOne:
    user:
        targetEntity: Users
        joinColumns:
                  User:
                      referencedColumnName: ID
        inversedBy:venue
        orphanRemoval: false

users.orm.yml

oneToMany:
    venue:
        targetEntity: Venues
        joinColumns:
                  Venue:
                      referencedColumnName: ID
        mappedBy: user
        orphanRemoval: false

小心:

joinColumns:
    X:
       referencedColumnName: Y

X和Y是sql表字段,Entity字段的X字段,Y引用的实体字段。

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多