/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/traits/TranslateQueryTrait.php
93 строки
3 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\traits; use common\helpers\LanguageHelper; /** * Расширение для переводов моделей * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2021 */ trait TranslateQueryTrait { /** * формируем поля, которые необходимо еще выбрать для перевода * @return mixed */ public function addPerevodSelect() { $class = new $this->modelClass; $keys = $class->translate_map; $select = []; $alias = $this->alias . '_p'; // формируем поля, которые необходимо еще выбрать для перевода foreach ($keys as $key) { $select[$key . '_p'] = $alias . '.' . $key; } $this->addSelect($select); return $this; } /** * Зготовка для выборки дополнительных полей при учёте перевода * * @param null $yazik_id Идентификатор языка * @param string $type Тип присоединения * @param bool $add_select Добавлять в выборку данные * @param null $b_alias Пользовательский алиас * @return mixed */ public function preparePerevod($yazik_id = null, $type = 'LEFT JOIN', $add_select = true, $b_alias = null) { $a = $this->alias; if ($yazik_id and $yazik_id != LanguageHelper::DEFAULT_LANGUAGE) { // left join <PEREVOD_TABLE> k_p ON k_p.KDF_ID = o.id and k_p.yazik_id = :? $class = new $this->modelClass; $b = $b_alias ?: $this->alias . '_p'; if ($add_select) { $this->select([$a . '.*']) ->addPerevodSelect(); } return $this ->alias($a) ->join($type, [$b => $class->translate_table], $b . '.' . $class->fkName . ' = ' . $a . '.' . $class->pkName . ' and ' . $b . '.yazik_id = :' . $b . '_yazik_id', [$b . '_yazik_id' => $yazik_id] ); } else { return $this ->alias($a); } } /** * Выбор данных - Фильтрация по языку * * @param null $yazik_id * @param null $alias * @return mixed */ public function prepareLanguage($yazik_id = null, $alias = null) { $a = $alias ?: $this->alias; if ($yazik_id and $yazik_id != LanguageHelper::DEFAULT_LANGUAGE) { $b = $this->alias . '_p'; return $this->andWhere([ 'or', [$b . '.yazik_id' => $yazik_id], [$a . '.yazik_id' => $yazik_id] ]); } else { return $this->andWhere([$a . '.yazik_id' => $yazik_id]); } } }