PHP: как показать данные из другой модели на основе идентификатора в качестве внешнего ключа?

У меня есть приложение, использующее фреймворк yii2.

В моем приложении есть БД, содержащая таблицы:

  1. class =>

    • id => as PK
    • имя_класса
    • id_учителя
  2. student =>

    • id
    • class_id =› как class_id как внешний ключ из таблицы class
    • имя студента
    • возраст
    • секс
  3. И т.д

и в моем index.php(class) я использую Kartik Gridview для отображения данных класса. Как вы знаете, в представлении сетки есть много действий, таких как действие кнопки view. Пример: мой index.php показывает данные из class с id = 101 в форме gridView.

Как я могу показать все student_name из таблицы student, в которой class_id = 101?

и у меня есть этот код:

в моем class.php в моей модели класса

public function getStudents() {
    return $this->hasMany(students::className(), ['class_id' => 'class_id']);
}

и код для моего gridView

view.php в моем представлении класса

<?=
DetailView::widget([
    'model' => $model,
    'condensed' => true,
    'hover' => true,
    'enableEditMode' => false,
    'mode' => DetailView::MODE_VIEW,
    'panel' => [
        'heading' => 'Data Detail',
        'type' => DetailView::TYPE_INFO,
    ],
    'attributes' => [
        'alamat_lengkap',
        'jumlah_dpp',
        'jumlah_ppn',
        'jumlah_ppnbm',
        'fg_uang_muka',
        'uang_muka_dpp',
        'uang_muka_ppn',
        'uang_muka_ppnbm',
        [
            'label' => 'Kode Objek',
            'value' => $model->students->student_name,     //this code didn't work and return error as "Trying to get property of non-object"
        ],
    ],
])
?>

Любая помощь будет оценена :), спасибо :)


person Blackjack    schedule 02.02.2017    source источник
comment
обновите свой вопрос и добавьте код, в котором вы вызываете view.php (я думаю, что это index.php) и контроллер/действие для view.php   -  person scaisEdge    schedule 02.02.2017


Ответы (1)


Для DetailView :

'value' => implode(',', \yii\helpers\ArrayHelper::map($model->fakturOutDetails, 'id', 'student_name')),

Для GridView :

'value' => function($model) {
    return implode(',', \yii\helpers\ArrayHelper::map($model->fakturOutDetails, 'id', 'student_name')),
},
person Insane Skull    schedule 02.02.2017