Задать вопрос

Как выбрать более правильное решение по коду?

Доброго времени суток! В модели поиска Search.php есть метод для получения массива с именами пользователей для дальнейшего вывода их списком dropdown в шаблоне
public function getDropDownData(): array
   {
        $data = [];

        $query = self::find()->select('id')->distinct()->all();

        foreach ($query as $user) {
            $data[$user->id] = $user->getName();
        }

        return $data;
    }


Нужно помимо имени пользователя вывести название компании рядом в скобках из связанной таблицы. Я доработал метод и сделал так
foreach ($query as $user) {
            $data[$user->id] = $user->getName() . ' (' . $user->company->getName() . ')';
        }

Но мне кажется такой способ не очень красив, так как вдруг понадобится этот список в другом месте, но без имени компании, да и принцип открытости-закрытости нарушается как мне кажется. Подскажите как можно решить эту проблему?
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@KingstonKMS
Сделайте два метода.
1. Имена пользователей
2. Имена пользователей + компании (sql запрос: join с таблицей company)
В цикле только формирование значения из полученных данных
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
revenger
@revenger
49.5
Имхо, сделать две модели: Companies.php и Users.php.
$search = Users::find()->with('Companies')->where([условие])->all();

Дальше разбирать полученный массив.
Рекомендую использовать ArrayHelper
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы