【问题标题】:Pluck and Implode Method in Laravel?Laravel 中的 Pluck 和 Implode 方法?
【发布时间】:2020-07-05 20:03:31
【问题描述】:

我有三个班级 Student,Session 和学生班级,它有关系(学生与 Enrollment,Session 与 Enrollment 和 Student Class with Enrollment),当我回显它时显示结果 [{"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())}}

注意它正在工作


与 Session 相同,它也可以工作,但是当我从学生类中提取并需要 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 值。谢谢

【问题讨论】:

    标签: laravel eloquent laravel-blade laravel-controller laravel-models


    【解决方案1】:

    首先请注意,您可以在照明/收集方法上使用implode 方法:

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

    可以进一步缩短为

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

    studentclass可以这样拔

    {{ $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();
    

    【讨论】:

    • {{$en->school()->pluck('school_name')->implode(', ') }} 或 {{implode(',',$en->school( )->get()->pluck('school_name')->toArray())}} 两者都有效,但从 studentclass 函数中选择 class_name 不起作用,即使关系正常,如果我回显 $en,它会得到 class_id来自入学班
    • echo $en 显示以下结果 [{"id":1,"school_id":1,"class_id":1,"student_id":1,"session_id":1,"created_at" :null,"updated_at":null}] 这意味着我们有 class_id 为什么我们不能使用 Enrollement Model 中的关系函数 studentclass 来选择 class_name
    • 如果您在我的回答中看到第二个示例,它显示了如何实现这一点。
    【解决方案2】:

    我已经更改了 Enrollment Model 中的 studentclass 函数

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

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

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

    【讨论】:

      【解决方案3】:

      您可以使用简单的 . 表示法提取关系的列,如下所示。

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

      在这里,它的形式为relationshipcolumn

      【讨论】:

      • {{$en->school()->pluck('school_name')->implode(', ') }} 或 {{implode(',',$en->school( )->get()->pluck('school_name')->toArray())}} 两者都有效,但从 studentclass 函数中选择 class_name 不起作用,即使关系正常,如果我回显 $en,它会得到 class_id来自入学班
      • echo $en 显示以下结果 [{"id":1,"school_id":1,"class_id":1,"student_id":1,"session_id":1,"created_at" :null,"updated_at":null}] 这意味着我们有 class_id 为什么我们不能使用 Enrollement Model 中的关系函数 studentclass 来选择 class_name
      猜你喜欢
      • 2017-03-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2021-12-01
      相关资源
      最近更新 更多