Метод Pluck and Implode в Laravel?

У меня есть три класса: ученик, сеанс и ученические классы, у которых есть отношения (ученик с зачислением, сеанс с зачислением и ученический класс с зачислением), когда я повторяю, он показывает результат [{id: 1, school_id: 1, class_id: 1 , student_id: 1, session_id: 1, created_at: null, updated_at: null}], я получил значение из класса ученика

{{implode(',',$en->school()->get()->pluck('school_name')->toArray())}}

Обратите внимание, что это работает


то же самое из сеанса, он также работает, но когда я взял из класса ученика и мне нужен class_name, он не показывает ошибку, но не извлекаемое значение из studentclass, вот тот же тип запроса в blade.php

{{implode(',',$en->studentclass()->get()->pluck('class_name')->toArray())}}

вот отношение один ко многим в StudentClass Controller

public function enrollments()
    {
        return $this->hasMany(Enrollement::class);
    }

Зачисление в класс

public function studentclass()
    {
        return $this->belongsTo(StudentClass::class);
    }

как выбрать значение class_name из таблицы, используя это отношение. Благодарность


person inasar    schedule 05.07.2020    source источник


Ответы (3)


Во-первых, обратите внимание, что вы можете использовать метод implode для метода освещения / сбора:

{{ $en->school()->get()->pluck('school_name')->implode(', ') }}

который может быть сокращен до

{{ $en->school->pluck('school_name')->implode(', ') }}

Студенческий класс можно сорвать вот так

{{ $en->studentclass->pluck('enrollments.class_name')->implode(', ') }}

использование точечного синтаксиса для доступа к имени класса.

чтобы предотвратить возникновение проблемы n + 1 и уменьшить количество выполняемых запросов, вам следует отложить загрузку отношения:

{{ $en->load('studentclass.enrollments')->studentclass->pluck('enrollments.class_name')->implode(', ') }}

вы также можете загрузить его заранее:

$en = Enrollment::with('studentclass.enrollments')->where('id', $id)->first();
person Andrew Willis    schedule 05.07.2020
comment
{{$ en- ›school () -› pluck ('school_name') - ›implode (',')}} или {{implode (',', $ en-› school () - ›get () -› pluck ('school_name') - ›toArray ())}} Оба работают, но не работает, чтобы выбрать class_name из функции studentclass, даже если отношения в порядке, если я повторю $ en, он получит class_id из класса Enrollement - person inasar; 06.07.2020
comment
echo $ en покажет следующий результат [{id: 1, school_id: 1, class_id: 1, student_id: 1, session_id: 1, created_at: null, updated_at: null}] это означает, что у нас есть class_id, почему мы не можем выбрать class_name, используя функция отношения studentclass в модели зачисления - person inasar; 06.07.2020
comment
Если вы видите второй пример в моем ответе, он показывает, как этого добиться. - person Andrew Willis; 06.07.2020

Я изменил функцию studentclass в модели регистрации

public function studentclass()
    {
        return $this->belongsTo(StudentClass::class,'id');
    }

просто добавив "id" и уберите из поля зрения

{{implode(',',$en->studentclass()->get()->pluck('class_name')->toArray())}}
person inasar    schedule 05.07.2020

Вы можете выбрать столбец отношения, используя простую нотацию ., как показано ниже.

{{ implode(',', $en->studentclass()->pluck('studentclass.class_name')->toArray()) }}

Здесь он выглядит как relationship . column

person Kiran Maniya    schedule 05.07.2020
comment
{{$ en- ›school () -› pluck ('school_name') - ›implode (',')}} или {{implode (',', $ en-› school () - ›get () -› pluck ('school_name') - ›toArray ())}} Оба работают, но не работает, чтобы выбрать class_name из функции studentclass, даже если отношения в порядке, если я повторю $ en, он получит class_id из класса Enrollement - person inasar; 06.07.2020
comment
echo $ en покажет следующий результат [{id: 1, school_id: 1, class_id: 1, student_id: 1, session_id: 1, created_at: null, updated_at: null}] это означает, что у нас есть class_id, почему мы не можем выбрать class_name, используя функция отношения studentclass в модели зачисления - person inasar; 06.07.2020