Связанные данные

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Связанные данные

Сообщение AlexSergeev1990 »

Ребят, столкнулся со связанными данными, да я еще совсем плох Yii2 поэтому сильно не ругайте...такая проблема......
не могу понять почему данные не выводятся.
У меня есть три связанные таблицы Pacients, history_pacients, napravlenie.
Изображение
На странице Napravlanie я хочу вывести по номеру направления имя пациента, но почему то данные не выводятся вот листинги моделей...

Код: Выделить всё

class System extends ActiveRecord
{
    static function tableName()
    {
        return 'pacients';
    }

    public  function attributeLabels()
    {
        return [
            'id'=>'id',
            'UID'=>'UID',
            'family'=>'Фамилия',
            'name'=>'Имя',
            'otchestvo'=>'Отчество',
            'dr'=>'Дата рождения',
            'snils'=>'СНИЛС'
        ];

    }


}

Код: Выделить всё

class Historypacients extends ActiveRecord

 {
    static function tableName()
    {
        return 'history_pacients';
    }

    public  function attributeLabels()
    {
        return [
            'id'=>'id',
            'date'=>'Время направления',
            'pacients.family'=>'Фамилия',
            'pacients.name'=>'Имя',
            'pacients.otchestvo'=>'Отчество','pacients.dr'=>'Дата рождения',
            'status.status'=>'Статус направления',
            'napravlenie.id'=>'yfghfdkt'
        ];
    }
    public function getPacients(){
    return $this->hasOne(System::className(),['id'=>'pacient_id']);
    }
    public function getStatus(){
        return $this->hasOne(Status::className(),['id'=>'status_id']);
    }
    public function getNapr(){
        return $this->hasOne(Procedurnay::className(),['naprvavlenie_id'=>'id']);
    }
}

Код: Выделить всё

class Napravlenie extends ActiveRecord
{
   static  function tableName(){

            return 'napravlenie';
   }


    public  function getPacients(){
        return $this->hasMany(System::className(), ['id' => 'pacient_id'])
            ->viaTable('history_pacients', ['napravlenie_id' => 'id']);
    }
}

кто нить может объяснить как из номера направления вытащить через промежуточную таблицу фамилию пациента?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Связанные данные

Сообщение SiZE »

А что конкретно не получается? Как выводишь?
AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Re: Связанные данные

Сообщение AlexSergeev1990 »

SiZE писал(а): 2017.11.28, 16:00 А что конкретно не получается? Как выводишь?
в gridview вывожу в свойстве columns=>[
pacients.family
]
столбцы все пустые....ошибок нет, но столбцы пустые.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Связанные данные

Сообщение SiZE »

Все довольно просто. Подключи https://github.com/yiisoft/yii2-debug. Посмотри какой запрос уходит на получение данных, проверь есть ли эти данные в базе.
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Связанные данные

Сообщение Nex-Otaku »

П..да пациентам.
AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Re: Связанные данные

Сообщение AlexSergeev1990 »

Nex-Otaku писал(а): 2017.11.29, 20:39 П..да пациентам.
как же ты прав..но все таки, разве я неправильно написал запрос....неправильно использовал viaTable?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Связанные данные

Сообщение Nex-Otaku »

Связь правильно описана. Но GridView не умеет склеивать множественные связи в одну строку. Поэтому тебе нужно сделать это самостоятельно.

Код: Выделить всё

'columns' => [
...
[
	'label' => 'Пациенты',
	'value' => function ($model, $key, $index, $column) {
		return implode(', ', ArrayHelper::getColumn($model->pacients, 'family'));
	}
]
AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Re: Связанные данные

Сообщение AlexSergeev1990 »

Nex-Otaku писал(а): 2017.12.04, 10:43 Связь правильно описана. Но GridView не умеет склеивать множественные связи в одну строку. Поэтому тебе нужно сделать это самостоятельно.

Код: Выделить всё

'columns' => [
...
[
	'label' => 'Пациенты',
	'value' => function ($model, $key, $index, $column) {
		return implode(', ', ArrayHelper::getColumn($model->pacients, 'family'));
	}
]
Спасибо тебе добрый человек!! Я реально нигде не нашел, про это инфу!! :D
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Связанные данные

Сообщение ElisDN »

AlexSergeev1990 писал(а): 2017.12.04, 13:16 Я реально нигде не нашел, про это инфу!! :D
На нашли, как массив в строку склеить через implode()?
AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Re: Связанные данные

Сообщение AlexSergeev1990 »

ElisDN писал(а): 2017.12.04, 13:20
AlexSergeev1990 писал(а): 2017.12.04, 13:16 Я реально нигде не нашел, про это инфу!! :D
На нашли, как массив в строку склеить через implode()?
Я же говорю я немножко туповат в Yii2))) Спасибо!! :D
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Связанные данные

Сообщение SiZE »

AlexSergeev1990 писал(а): 2017.12.04, 13:27 Я же говорю я немножко туповат в Yii2))) Спасибо!! :D
Это база рнр
AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Re: Связанные данные

Сообщение AlexSergeev1990 »

SiZE писал(а): 2017.12.05, 08:27
AlexSergeev1990 писал(а): 2017.12.04, 13:27 Я же говорю я немножко туповат в Yii2))) Спасибо!! :D
Это база рнр
да? и где в php есть функции hasMany и haseOne?
Чисто на php я конечно умею вытаскивать связанные данные.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Связанные данные

Сообщение caHek2x »

имеется ввиду implode база php ... ведь в связях вам не подсказывали вы их сами описали ...
Ответить