You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel新手求助:如何关联多表并单独查询course1、course2、course3字段

Laravel多字段关联课程表查询解决方案

你的assigncourses表有course1、course2、course3三个字段对应课程ID,要同时获取这三个字段的课程信息,需要多次关联courses表并通过别名区分,以下是两种实现方式:

1. 原生Join方式(适合快速查询)

修改控制器代码,三次关联courses表并指定别名,选择字段时添加别名避免冲突:

$courses = Assigncourse::join('teachers', 'teachers.id', '=', 'assigncourses.teacher_id')
    // 关联course1对应的课程
    ->join('courses as c1', 'c1.id', '=', 'assigncourses.course1')
    // 关联course2对应的课程
    ->join('courses as c2', 'c2.id', '=', 'assigncourses.course2')
    // 关联course3对应的课程
    ->join('courses as c3', 'c3.id', '=', 'assigncourses.course3')
    ->where('teachers.id', '=', $id)
    ->select([
        'teachers.name as teacher_name',
        // course1相关字段
        'c1.id as course1_id',
        'c1.course_title as course1_title',
        'c1.course_code as course1_code',
        'c1.course_credit as course1_credit',
        'c1.course_type as course1_type',
        // course2相关字段
        'c2.id as course2_id',
        'c2.course_title as course2_title',
        'c2.course_code as course2_code',
        'c2.course_credit as course2_credit',
        'c2.course_type as course2_type',
        // course3相关字段
        'c3.id as course3_id',
        'c3.course_title as course3_title',
        'c3.course_code as course3_code',
        'c3.course_credit as course3_credit',
        'c3.course_type as course3_type'
    ])
    ->get();

2. Eloquent关联方式(更符合Laravel规范)

在Assigncourse模型中定义关联关系:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Assigncourse extends Model
{
    protected $table = 'assigncourses';

    // 关联course1对应的课程
    public function course1()
    {
        return $this->belongsTo(Course::class, 'course1');
    }

    // 关联course2对应的课程
    public function course2()
    {
        return $this->belongsTo(Course::class, 'course2');
    }

    // 关联course3对应的课程
    public function course3()
    {
        return $this->belongsTo(Course::class, 'course3');
    }

    // 关联教师
    public function teacher()
    {
        return $this->belongsTo(Teacher::class);
    }
}

控制器中使用预加载获取关联数据:

$assignCourses = Assigncourse::with(['teacher', 'course1', 'course2', 'course3'])
    ->where('teacher_id', $id)
    ->get();

视图中可直接通过对象属性访问数据,示例:

@foreach($assignCourses as $item)
    <p>教师:{{ $item->teacher->name }}</p>
    <p>课程1:{{ $item->course1->course_title }}({{ $item->course1->course_code }})</p>
    <p>课程2:{{ $item->course2->course_title }}({{ $item->course2->course_code }})</p>
    <p>课程3:{{ $item->course3->course_title }}({{ $item->course3->course_code }})</p>
@endforeach

内容的提问来源于stack exchange,提问作者1641_Shourav Chy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:36:35