Abr_ya
@Abr_ya

Yii2, Grid view, Label — как сделать метку из нескольких полей по внешнему ключу?

Пример довольно тривиальный.
У меня две таблицы. Я вывожу услуги, в них есть id пользователя. Вместо id хочу вывести фамилию и имя, которые хранятся в таблице пользователей.
Делаю по этой инструкции:
php-lessons.com/blog/2016/06/06/yii2-view-data-ral...

создал в модели услуг функцию:
// получаем пользователя по ID
    public function getUser() {
        return ($this->hasOne(UserRecord::className(), ['id' => 'user_id']));
    }


В виде, который отвечает за вывод услуг, при вызове виджета, указываю:
...
array('attribute'=>'user_id','filter'=>$users,'label'=>'User','value'=>('user.last_name')),
...


И всё хорошо, но это только фамилия.
А как мне вывести в этом столбце user.first_name и user.last_name через пробел?!

Все, что пришло мне в голову, падает с ошибками!(
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Нужно создать новый метод в модели User:

Как вариант создать в представлении анонимную функцию:

public function getFullName(string $separator = ' '): string
{
    return implode($separator, array_filter([
        $this->firstName,
        $this->middleName,
        $this->lastName
    ]));
}


'value'=> function($model) {
return $model->first_name .' '. $model->last_name
}


Использовать:
user.fullName
//или

$user->getFullName(', ')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
villiwalla
@villiwalla
HTML-верстка
value => function (value) { return value->user->lastName .’ ‘.  value->user->firstName;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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