Laravel 中的采摘和内爆方法?

Pluck and Implode Method in Laravel?

我有三个 classes Student、Session 和 student classes 它有关系(Student with Enrollment、Session with Enrollment 和 student Class with enrollment),当我回显它显示结果 [{"id":1,"school_id":1,"class_id":1,"student_id":1,"session_id":1," =34=]":null,"updated_at":null}] ,我从学生 class

那里获取了价值
{{implode(',',$en->school()->get()->pluck('school_name')->toArray())}}

注意它正在工作


与 Session 相同,它也在工作,但是当我从学生 class 中提取并需要 class_name 时,它没有显示错误,但不是从学生 class 中提取的值,这里是blade.php

中相同类型的查询
{{implode(',',$en->studentclass()->get()->pluck('class_name')->toArray())}}

这里是StudentClassController

中一对多的关系
public function enrollments()
    {
        return $this->hasMany(Enrollement::class);
    }

入学人数Class

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

如何使用此关系从 table 中选取 class_name 值。谢谢

您可以使用下面给出的简单 . 符号提取关系的列。

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

在这里,它的形式是,relationshipcolumn

首先请注意,您可以在illuminate/collection方法上使用implode方法:

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

可以进一步缩短为

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

学生class可以这样摘

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

使用点语法访问 class 名称。

为了防止这造成 n+1 问题并减少查询数量 运行,您应该延迟加载关系:

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

也可以提前加载:

$en = Enrollment::with('studentclass.enrollments')->where('id', $id)->first();

我已经更改了注册模型中的学生班级功能

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

只需添加 'id' 并从视图中提取

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