我正在使用CakePHP 3.4,并且我将它用于双语网站,其中西班牙语(es
)是默认语言环境。我有MangasTable
为字段TranslateBehavior
实现了slug
,我试图查询它,如下所示:
$manga = $this->Mangas->find()
->select([
'id',
'nombre'
])
->where([$this->Mangas->translationField('slug') => $slug])
->firstOrFail();
关键是,部分$this->Mangas->translationField('slug')
将获得slug的翻译别名字段。或多或少,Mangas_slug_translation.content
。当它被本地化为英语时很好,但是使用默认的西班牙语,因为i18n
表中没有任何关于此语言的条目,它不会返回任何内容。穷人的方法是为语言提供条件并将其分配给$field
变量,但这看起来不太好。
还有其他方法,还是我错过了什么?
答案 0 :(得分:1)
穷人的方法是为语言设置条件并将其分配给
$field
变量,但这看起来不太好。
我担心这是你必须要做的事情,因为在检索到数据后原始字段被替换,并且翻译行为中没有任何功能可以确定适当的过滤字段。你可以在模型层的某个地方隐藏逻辑(表格,自定义/扩展行为),但是通常没有办法解决它的问题AFAICT。
您可能需要open an issue并提出改进建议。也许根据当前语言环境返回正确过滤字段的其他方法可以补充translationField()
方法。