Как переделать hasOne() на hasMany() в примере?

169
07 декабря 2018, 03:50

Как переделать данный пример используя hasMany() вместо hasOne() для отображения в ячейке GridView нескольких связанных данных из другой таблицы?

Пример: Ссылка на страницу с примером

Данные из связанных моделей в GridView

Связанные данные выводятся аналогично данным самой модели.

// Простой вариант, но без возможности сортировки по полю
'parent.name',
// Вариант с возможностью сортировки по полю
[
    'attribute'=>'parent_id',
    'label'=>'Родительская категория',
    'format'=>'text', // Возможные варианты: raw, html
    'content'=>function($data){
        return $data->getParentName();
    },
],

В модели Category описаны соответствующие методы.

public function getParent()
{
    return $this->hasOne(Category::className(), ['id' => 'parent_id']);
}
public function getParentName()
{
    $parent = $this->parent;
    return $parent ? $parent->name : '';
}
Answer 1

Сама связь hasMany() будет выглядеть следующим образом:

public function getParents(){
    return $this->hasMany(Category::className(), ['parent_id' => 'id']);
}

Так же рекомендую писать не className(), а class, т.к. в yii2 версии 2.0.14 оно deprecated

 @deprecated since 2.0.14. On PHP >=5.5, use `::class` instead. 

Для вывода всех связанных данных можно сформировать из них строку, примерно так:

public function getParentName(){
    $result = '';
    foreach($this->parents as $parent){
        $result .= $parent->name ?: '';
   }
   return $result;
}
READ ALSO
Call to a member function getImage() on null

Call to a member function getImage() on null

Подскажите пожалуйста где ошибка

201
Как восстановить приложение?

Как восстановить приложение?

Работаю на linux, делаю приложение на yii2-advanced, локальный сервер apache2

162
Как настроить права и роли (области видимости) в Битрикс24?

Как настроить права и роли (области видимости) в Битрикс24?

В настройках прав доступа Битрикс, раздел CRM, есть Пользователь ТЕСТ с ролью Начальник Отдела

134