CakePHP 3.6 Перевести и содержать - PullRequest
0 голосов
/ 27 августа 2018

Мне нужно построить представление из записи, показывающей все переводы, и я также хочу добавить таблицы, показывающие прикрепленные записи из связанных моделей, к этой конкретной записи.Связанные модели не нужно переводить, их можно просто показать на текущем языке.Есть ли способ объединить 'Contain' с -> find ('translations') ->?Или что было бы лучшим способом сделать это?

, например, группа имеет много ролей.Поэтому я хочу показать группу со всеми переводами для Groups.name, а также список всех ролей, принадлежащих этой группе.enter image description here

Теперь я сделал это с отдельными находками:

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);
}

Но мне интересно, нельзя ли объединить это в 1 находке, если естьвозможность использовать что-то в своем роде функции include () с find ('translations').

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Мы решили эту проблему с помощью этого, может быть, это может помочь

Создайте отдельную таблицу для переводов, например 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']
    ]);
0 голосов
/ 28 августа 2018

Я решил это так:

$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']);

Но по любой причине, которая не работала для меня.

...