【问题标题】:Doctrine notation issue教义符号问题
【发布时间】:2013-11-20 08:10:44
【问题描述】:

我有两个类,Multimedia 和 Tag,它们共享存储在第三个连接表中的 m:n 关系。

拥有方,多媒体类是这样的

Multimedia:
    type:   entity
    table:  multimedia

    manyToMany:                
        tags:
            targetEntity:   Tag
            inversedBy:    multimedia
            cascade:    [remove]
            orphanRemoval:  true
            joinTable:
                name: multimedia_tags
                joinColumns:
                    -
                        name: multimedia_id
                        referencedColumnName: id
                inverseJoinColumns:
                    -
                        name: tag_id
                        referencedColumnName: id

Tag:
    type: entity
    table: tags

    manyToMany:
        multimedia:
            targetEntity:   Multimedia
            mappedBy:   tags

创建关系工作正常,但出现错误注意:未定义索引:vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php 第 471 行中的多媒体。

任何帮助将不胜感激

【问题讨论】:

  • 我不清楚 .yml 配置,但它可能需要在 "manyToMany" 之后的行上额外缩进
  • 您想保存到数据库时遇到此错误对吧?问题在于,它需要一个多媒体对象来知道在哪里“链接”您的 TAG。
  • @denkiryokuhatsuden,抱歉,我的问题中的空格已关闭,我已按照文件中的内容进行了更正
  • @AndrásRátz 我只在尝试删除多媒体项目时收到错误消息。我检查了存储关系的多媒体标签表,ON DELETE 选项显示 RESTRICT。当我更改为 CASCADE 时,错误消失了,但项目没有被删除,但我收到一条消息,告诉我有一个错误。查看日志没有错误条目。

标签: symfony doctrine-orm


【解决方案1】:

你必须尝试在你的收藏中双向添加一个元素。

例如在您的实体标签中,您应该添加以下代码:

public function addMultimedia($multimedia)
{
     if (!$this->multimedia->contains($multimedia))
     {
         $multimedia->addTag($this);
         $this->multimedia->add($multimedia);
     }
}

【讨论】:

  • 这对删除部分有何影响?添加似乎工作正常,删除是我遇到的问题
  • 您必须使用 cascade 并将其设置为删除,并在您的关系中将 orphanRemoval 设置为 true
  • 按照您的指示更改了我的多媒体实体,清除了缓存..没有变化。感谢您的帮助
  • 如何删除对象?查看数据库中的关联表并告诉我您的持久化是否正常?
  • 坚持工作正常。我正在使用 Sonata Admin Bundle delete Action 来删除应该删除关联表行的多媒体
猜你喜欢
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2015-09-22
相关资源
最近更新 更多