Как я могу предотвратить дублирование имени в таблице, используя красноречивый запрос в laravel - PullRequest
0 голосов
/ 02 ноября 2018

В настоящее время я работаю над приложением для управления рабочим столом с laravel 5.6. Согласно правилу ведения пациента пациент может пройти одну или несколько консультаций в соответствии с указанными датами. Когда я отображаю список консультаций, у меня повторяется одно и то же имя, повторяющееся имя соответствует пациенту, у которого было несколько консультаций, мой вопрос о том, как этого избежать. То, что я хочу, это имя и все даты этих консультаций.

class Consultation extends Model
{
 public function patient()
    {
        return $this->belongsTo('App\Models\Patient');
    }
}


class Patient extends Model
{
 public function consultations()
    {
        return $this->hasMany('App\Models\Consultation');
    }
}

Вот запрос:

$consultations = Consultation::all();

here what i've got

1 Ответ

0 голосов
/ 02 ноября 2018

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

Код контроллера:

$active_patients = [];

foreach(Patient::all() as $patient) {
    if($patient->consultations->count()>0)
        array_push($active_patients,$patient);
}

Передайте $ active_patients вашему представлению, затем зациклите его, как показано ниже. Очевидно, я не знаю всех имен атрибутов для ваших моделей пациента или консультации, и вам потребуется исправить html-разметку, как требуется, но вы можете получить картинку:

@foreach($active_patients as $patient)
    <p>{{$patient->name}}:</p>
    @foreach($patient->consultations as $consultation)
        <p>{{$consultation->date}}</p>
    @endforeach
@endforeach

Отказ от ответственности: это не самый надежный способ сделать это. Это просто самый простой подход. Лучший способ сделать это - использовать запросы с областями действия в сочетании с добавленными атрибутами. Например, вы могли бы создать область действия для модели «Пациенты» для всех пациентов, у которых есть консультация, используя метод красноречивых запросов whereHas, чтобы найти пациентов, у которых запланированы консультации. Тогда вы можете просто ссылаться на них как на ActivePatient вместо того, чтобы создавать массив каждый раз, когда ссылаетесь на них. Вы также можете добавить атрибут к модели Консультаций, который делает то же самое, захватывает каждую консультацию для конкретных пользователей и создает коллекцию вложенных моделей, но это гораздо сложнее. Я был бы рад поделиться с вами этим методом, если хотите, но приведенный выше код, по крайней мере, предоставит вам рабочий метод для достижения того, что вы просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...