这是我的第一篇文章,因为直到现在我总是找到解决方案,直到现在......
我有三个实体(自行车,类别和额外)有一些字段可翻译。我知道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)
...任何想法?
答案 0 :(得分:0)
我解决了这个问题。
这个想法出现在我的BikeI18N表单构建器中。
class BikeI18NType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('descripcio')
->add('locale', 'hidden')
//->add('bike', 'hidden')
;
}
}
当我评论自行车添加时,问题就解决了。
感谢阅读!