CakePHP 3.6 翻译和包含
CakePHP 3.6 Translate and Contain
我需要从显示所有翻译的记录构建视图,并且我还想添加表以显示关联模型到该特定记录的附加记录。关联的模型无需翻译,只需以当前语言显示即可。
有没有办法将 'Contain' 与 ->find('translations')-> 结合起来?
或者这样做的最佳做法是什么?
f.e。一个组有很多角色。因此,我想向该组显示 Groups.name 的所有翻译以及属于该组的所有角色的列表。
现在我用单独的发现做到了:
public function view($id = null)
{
$group = $this->Groups->find('translations')->where(['Groups.id' => $id])->first();
$this->set('group', $group);
// related Roles
$related_roles = $this->Groups->Roles->find('all', [
'conditions' => ['Roles.group_id' => $id]
]);
$this->set('related_roles', $related_roles);
}
但我想知道是否有可能将某种 contain() 与 find('translations') 结合使用。
我是这样解决的:
$group = $this->Groups
->find('translations')
->where(['Groups.id' => $id])
->contain(['Roles', 'Users'])
->first();
在我尝试之前,手册中是这样的:
$group = $this->Groups
->find('translations')
->where(['Groups.id' => $id])
->first();
$group->contain(['Roles', 'Users']);
但无论出于何种原因,这对我来说都不起作用。
我们已经用这个解决了这个问题,也许这个可以帮助
为翻译创建一个单独的 table,即 groups_i18n
https://book.cakephp.org/3.0/en/orm/behaviors/translate.html#using-a-separate-translations-table
现在在 Entity/Group 中添加行。php
protected $_accessible = [
//other columns
'name_translation' => true,
'_i18n' => true,
'_translations' => true
];
现在 GroupsTable.php,添加行为
$this->addBehavior('Translate', [
'fields' => ['name'],
'translationTable' => 'GroupsI18n'
]);
现在 GroupsController.php
$group = $this->Groups->get($id, [
'contain' => ['Roles', 'Groups_name_translation', 'GroupsI18n']
]);
我需要从显示所有翻译的记录构建视图,并且我还想添加表以显示关联模型到该特定记录的附加记录。关联的模型无需翻译,只需以当前语言显示即可。 有没有办法将 'Contain' 与 ->find('translations')-> 结合起来? 或者这样做的最佳做法是什么?
f.e。一个组有很多角色。因此,我想向该组显示 Groups.name 的所有翻译以及属于该组的所有角色的列表。
现在我用单独的发现做到了:
public function view($id = null)
{
$group = $this->Groups->find('translations')->where(['Groups.id' => $id])->first();
$this->set('group', $group);
// related Roles
$related_roles = $this->Groups->Roles->find('all', [
'conditions' => ['Roles.group_id' => $id]
]);
$this->set('related_roles', $related_roles);
}
但我想知道是否有可能将某种 contain() 与 find('translations') 结合使用。
我是这样解决的:
$group = $this->Groups
->find('translations')
->where(['Groups.id' => $id])
->contain(['Roles', 'Users'])
->first();
在我尝试之前,手册中是这样的:
$group = $this->Groups
->find('translations')
->where(['Groups.id' => $id])
->first();
$group->contain(['Roles', 'Users']);
但无论出于何种原因,这对我来说都不起作用。
我们已经用这个解决了这个问题,也许这个可以帮助
为翻译创建一个单独的 table,即 groups_i18n https://book.cakephp.org/3.0/en/orm/behaviors/translate.html#using-a-separate-translations-table
现在在 Entity/Group 中添加行。php
protected $_accessible = [
//other columns
'name_translation' => true,
'_i18n' => true,
'_translations' => true
];
现在 GroupsTable.php,添加行为
$this->addBehavior('Translate', [
'fields' => ['name'],
'translationTable' => 'GroupsI18n'
]);
现在 GroupsController.php
$group = $this->Groups->get($id, [
'contain' => ['Roles', 'Groups_name_translation', 'GroupsI18n']
]);