Как получить доступ к таблице в laravel с помощью eloquent с, напрямую не прилагается - PullRequest
3 голосов
/ 18 февраля 2020

У меня есть следующая структура таблицы, и я хочу получить доступ к порталу, который назначен на конкретный случай c, но с использованием информации о пациенте. Например, у меня есть следующий запрос

$data['patients'] = Patient::with('operator')->where('case_id', $case_id)->get();

, этот запрос возвращает оператора, назначенного пациенту, теперь я хочу, чтобы имя портала, назначенное пациенту, использовало регистр.

Таблица портала

id   Name   
1   A
2   B

Случаи

id     Name    case_number     patient_name     user_id     portal_id
1      Farz       456            sania             5           1    

Пациент

id    case_id   operator_id
2     456            5      

Ответы [ 4 ]

3 голосов
/ 18 февраля 2020

При условии, что вы правильно создали отношения laravel между моделями Portal, Case, Patient и Operator, вы можете получить доступ следующим образом:

// you get Case model
$case = \App\Case::findOrFail($case_id);

// patients: there is a hasMany relationship between Case and Patient models
$data['patients'] = $case->patients;

// there is a belongsTo relationship between Case and Portal models
$portal_name = $case->portal->Name;
1 голос
/ 18 февраля 2020

Вы должны использовать другое отношение

$data['patients'] = Patient::with('operator', 'cases.portal')
                             ->get();

У пациента:

public function cases(){
    return $this->hasMany(Case::class);
}

В случае:

public function portal(){
    return $this->belongsTo(Portal::class);
}

, тогда вы можете получить к нему доступ с помощью:

foreach($data['patients'] as $patient){
    foreach($patient->cases as case){
         $var = $case->name;
    }
}

или, если вам нужны все имена порталов:

$portals_names = $data['patient'][0]->pluck('cases.portal.name')

0 голосов
/ 18 февраля 2020

Изменение в вашем контроллере.

$data['patients'] = Patient::with('operator', 'cases.portal')
                             ->get();

Модель пациента

public function cases(){
    return $this->hasMany(Case::class);
}

Модель кейса

public function portal(){
    return $this->belongsTo(Portal::class);
}

Клинок. php

foreach($data['patients'] as $patient){
    foreach($patient->cases as case){
         $casname = $case->name;
    }
}
0 голосов
/ 18 февраля 2020

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

$data['patients'] = Patient::with('operator')->where('case_id', $case_id)->get();
$portals = [];

foreach ($data['patients'] as $patient) {
    foreach ($patient->cases as $case) {
        $portals []= $case->portal;
    }
}

Я полагаю, что между пациентом и делом HasMany, а между делом и BelongTo Портал?

Если вы хотите лениво загрузить данные, вы можете попробовать:

$data['patients'] = Patient::with(['operator', 'cases.portal'])->where('case_id', $case_id)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...