【发布时间】:2019-03-08 21:06:38
【问题描述】:
我有一个包含 图库 的 Event 实体。每个语言环境应该有不同的画廊。我在这里应用了与我的 title 字符串相同的 Translatable 注释:
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
----------------------------------------------------------------------------
标题翻译行已经正确。 我只是希望同样的逻辑也适用于画廊。
【问题讨论】:
-
你实现了 Translatable 吗?前任。 class Article 实现了 Translatable { content } 并定义了 Gedmo\Translatable\Translatable in use section ?
-
@3y3skill3r 是的,正常的翻译工作正常,例如为字符串标题。我隐藏了部分代码。
-
@3y3skill3r 请看我上面的更新代码
-
我不明白。预期的结果是什么?一个事件有几个不同的画廊实体标记了语言环境?一个 Event 有一个单独的画廊,但有些东西会根据语言环境以某种方式翻译它?你认为你的桌子应该是什么样子?
-
@NicolasB 我已经用上面的更多细节更新了我的问题。基本上,我的预期结果是一个事件将有几个不同的画廊实体标记有语言环境
标签: php symfony doctrine translation sonata