php - 在 Symfony 中,如何翻译实体中的关联字段(外键)?
问题描述
我有一个包含画廊的Event实体。每个地区应该有不同的画廊。我在这里应用了标题字符串中相同的可翻译注释:
use Gedmo\Mapping\Annotation as Gedmo;
use Sonata\TranslationBundle\Model\Gedmo\TranslatableInterface;
use Sonata\TranslationBundle\Traits\Gedmo\PersonalTranslatableTrait;
/** other codes hidden for brevity **/
/**
* @ORM\Entity(repositoryClass="App\Repository\EventRepository")
* @ORM\Table(name="events")
* @Gedmo\TranslationEntity(class="App\Entity\Translation\EventTranslation")
*/
class Event implements TranslatableInterface {
use PersonalTranslatableTrait;
/** other fields hidden for brevity **/
/**
* @var Gallery $gallery
*
* @ORM\ManyToOne(targetEntity="App\Sonata\MediaBundle\Entity\Gallery", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="gallery_id", referencedColumnName="id", onDelete = "SET NULL")
* })
*
* @Gedmo\Translatable()
*/
private $gallery;
但是在刷新时,我得到:
InvalidMappingException 无法找到可翻译的 [图库] 作为实体中的映射属性 - App\Entity\Event
顺便说一句,标题字符串和其他可翻译字符串工作正常(即在 event_translations 表中创建条目没有错误)
因此,例如,默认语言环境 (en) 和其他语言环境 (ph, wb)
我的预期结果是这样的:
table: event
----------------------------------
id | title | gallery_id
23 | my event | 451
----------------------------------
table: event_translations
----------------------------------------------------------------------------
id |locale |object_class |field |foreign_key |content
1 |ph |App\Entity\Event |title |23 |aking piyesta
2 |ph |App\Entity\Event |gallery |23 |452
3 |wb |App\Entity\Event |gallery |23 |453
----------------------------------------------------------------------------
标题翻译行已经正确。我只是希望同样的逻辑也适用于画廊。
解决方案
我认为以下应该有效。
翻译类应该是这样的:
/**
* @ORM\Entity
* @ORM\Table(name="event_translation")
*/
class EventTranslation extends AbstractPersonalTranslation
{
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Event", inversedBy="translations")
* @ORM\JoinColumn(name="object_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $object;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Gallery")
* @ORM\JoinColumn(name="gallery_id", referencedColumnName="id")
*/
private $gallery;
}
事件类将是:
/**
* @ORM\Entity(repositoryClass="App\Repository\EventRepository")
* @ORM\Table(name="events")
* @Gedmo\TranslationEntity(class="App\Entity\Translation\EventTranslation")
*/
class OrderEntity implements TranslatableInterface
{
use PersonalTranslatableTrait;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Translation\EventTranslation", mappedBy="object", cascade={"persist"})
* @Gedmo\Translatable()
*/
private $translations;
// ...
}
所以画廊是 EventTranslation 的一个字段,而不是直接的 Event 的一个字段。
让我知道事情的后续。
推荐阅读
- python - 在后台主机上运行python程序时mininet程序执行时间的差异
- r - 将传单导出到针织文档中的闪亮地图
- c++ - 从二进制文件中获取数据
- c# - Xamarin 使用 Microsoft.Extensions.DependencyInjection 形成依赖注入
- ios - SwiftUI DatePicker -- 根本不允许日期?
- cocoa - 侧边栏自动调整以适应系统偏好中的图标大小变化
- c - 应该进行哪些更改才能在屏幕上生成以下图案?***** **** *** ** *
- node.js - 我无法安装包 quick.db
- java - 在 Hibernate 中是否可以使用可选的 ElementCollections
- python - 如何使用变量的值而不是数字