yii2 показать данные из связанной таблицы - PullRequest
0 голосов
/ 05 мая 2020

У меня есть две таблицы:

  • параметры : с полями " id (серийный номер), имя (varchar), тип (int) ".
  • options_activity : те же поля, что и в таблице параметров: id , name , тип и: activity_id (серийный), admin (int), date (временная метка), действие (int) .

Когда я создаю параметр, я сохраняю его как в таблице параметров, так и в options_activity. Таблица options_activity - это регистр; каждый раз, когда администратор создает / редактирует параметр, значения параметра регистрируются в таблице параметров и копируются ($ model-> attributes) в options_activity и добавляют дату, идентификатор администратора и поле действия (1 = создано, 2 = отредактировано ). Это работает нормально.

Итак, что я пытаюсь сделать, это в представлении параметра показать представление параметра, а затем показать таблицу ниже со всеми его действиями (если есть активность) . Как я мог это сделать?

Пример (просмотр):

| Вариант: 1 | «это мой вариант» | Тип: 1

Таблица действий (вариант 1):

| --------------------- ---------------------------------------- |

| Дата: 2020-01-01 | Админ: 1 | Создано | «Это мой вариант |

| Дата: 2020-01-03 | Админ: 1 | Отредактировано | 'Это вариант |

| Дата: 2020-02-10 | Админ: 2 | Отредактировано | 'Это опция |

| -------------------------------------- ----------------------- |

Я могу показать все действия, но хочу показать только действия именно этот вариант. Я не могу фильтровать по его ID.

Это мой OptionsController , actionView ($ id):

public function actionView($id)
{
  $searchModel_act = new OptionsActivitySearch();
  $dataProvider_act = $searchModel_act->search(Yii::$app->request->queryParams);
  $model_activity_op = new OptionsActivity();

  return $this->render('view', [
        'searchModel_act' => $searchModel_act,
        'dataProvider_act' => $dataProvider_act,
        'model_activity_op' => $model_activity_op,
        'model' => $this->findModel($id),
    ]);
}

(также пробовали другие варианты пытается передать идентификатор, например $ dataProvider_act = OpcionesActivity :: find () -> where (['id' => $ id]) -> orderBy (['fecha' => SORT_ASC]) -> all (); Или ['id' => $ model-> id], но не работает.

Мой вид :

<?=GridView::widget([
    'dataProvider' => $dataProvider_act,
    'filterModel' => $searchModel_act,
    'columns' => [
      ['class' => 'yii\grid\SerialColumn'],
        'id',
        'opcion',
        'type',
        'date',
        'admin',
        'action',
    ],
]) 
?>

В моей модели Я также пробовал это, чтобы получить доступ к активности, но не работает:

public function getActivity()
{
    return $this->hasMany(OptionsActivity::class, ['id' => 'id']);
}

Есть идеи?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 мая 2020

Ну это было намного проще, чем я думал.

В контроллере:

public function actionView($id)
{

  $searchModel = new OptionsActivitySearch();
  $dataProvider = $searchModel->search(Yii::$app->request->queryParams, $id);

  //---------------------------
  return $this->render('view', [
      'model' => $this->findModel($id),
      'searchModel' => $searchModel,
      'dataProvider' => $dataProvider,
  ]);
}

В OptionsActivitySearch:

    public function search($params, $id)
    {
        $query = OptionsActivity::find()->where(['id' => $id])->orderBy(['id' => SORT_DESC]);

        // add conditions that should always apply here

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        $this->load($params);

//......
}

В представлении:

...

(часть gridView):

    <?=         
        GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
//...
        ])
        ?>
...