在具有许多相关实体的插入实体上失败

时间:2013-10-17 19:47:06

标签: symfony doctrine-orm

这是我的第一篇文章,因为直到现在我总是找到解决方案,直到现在......

我有三个实体(自行车,类别和额外)有一些字段可翻译。我知道symfony中有一个可翻译的扩展,但我发现有点晚了,我的解决方案总能正常工作。

事情是我有其他3个表(BikeI18N,CategoryI18N和ExtraI18N)。这些表与它们与列bike_id相关联(例如)。这里有自行车和类别的架构及其I18N的表格:

自行车:

BEM\BikeBundle\Entity\Bike:
type: entity
table: null
fields:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
    marca:
        type: string
        length: 255
    model:
        type: string
        length: 255
    preu1Dia:
        type: float
        column: preu_1dia
    [...]
manyToOne:
  category:
    targetEntity: BEM\CategoryBundle\Entity\Category
    inversedBy: bikes 
oneToMany:
  translation:
    targetEntity: BikeI18N
    mappedBy: bike
    cascade: [persist]        
  pedals:
    targetEntity: Pedal
    mappedBy: bike
  talles:
    targetEntity: Talla
    mappedBy: bike
manyToMany:
  accessoris:
    targetEntity: Accessori
    inversedBy: bikes      
lifecycleCallbacks: {  }

BikeI18N:

BEM\BikeBundle\Entity\BikeI18N:
type: entity
table: null
fields:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
    descripcio:
        type: text
    locale:
        type: string
        length: '2'
manyToOne:
  bike:
    targetEntity: Bike
    inversedBy: translation  
    joinColumn:
      bike_id:
        referencedColumnName: id        
lifecycleCallbacks: {  }

类别:

BEM\CategoryBundle\Entity\Category:
type: entity
table: null
repositoryClass: BEM\CategoryBundle\Repository\CategoryRepository
fields:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
oneToMany:
  translation:
    targetEntity: CategoryI18N
    mappedBy: category
    cascade: [persist]
  bikes:
    targetEntity: BEM\BikeBundle\Entity\Bike
    mappedBy: category
lifecycleCallbacks: {  }

最后是CategoryI18N:

BEM\CategoryBundle\Entity\CategoryI18N:
type: entity
table: null
fields:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
    categoryId:
        type: integer
        column: category_id
    locale:
        type: string
        length: '2'
    translation:
        type: string
        length: 255
manyToOne:
  category:
    targetEntity: Category
    inversedBy: translation
    joinColumn:
      category_id:
        referencedColumnName: id        
lifecycleCallbacks: {  }

在我的“新”表单中,我有一个包含4个嵌入的CategoryI18N表单的类别表单。它工作正常。问题是Bike和BikeI18N即使我做了同样的事情也没有。

如果我在$translation->setAccessori($this);中写Bike::addTranslation(BikeI18N $translation),我会收到错误必须管理传递给选择字段的实体。也许将它们留在实体经理中?

如果我不写$translation->setAccessori($this); 表单已保存但关系丢失,或者,如果我将数据库设置为not_nullable bike_id,则会收到错误。

对我来说没有意义的最令人惊讶的事情是我在类别类的addTranslation中有setCategory($this) ...任何想法?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

这个想法出现在我的BikeI18N表单构建器中。

    class BikeI18NType extends AbstractType
    {
       public function buildForm(FormBuilderInterface $builder, array $options)
         {
            $builder
            ->add('descripcio')
            ->add('locale', 'hidden')
            //->add('bike', 'hidden')
           ;
         }
     }

当我评论自行车添加时,问题就解决了。

感谢阅读!