我创建了2个表的课程和学生并插入数据,当从那2个表中返回数据时(这些表中的外键关系),它提供了我所有的数据,但名称列在学生和课程表中是相同的,当我显示名称时,它仅显示课程名字,但我要学生和课程名

这是我的控制器代码

public function index()
    {
        $data = DB::table('students')
            ->join('courses', function($join)
            {
                $join->on('students.course_id', '=', 'courses.course_id')
                    ->where('courses.course_id', '=', 101);
            })
            ->get();
//        dd($data);
        return view('student.home', compact('data'));
    }


显示代码

 @foreach($data as $d)
     {{ $d->roll_no }}
     {{ $d->name }}
     <br>
     @endforeach


课程表迁移

public function up()
    {
        Schema::create('courses', function (Blueprint $table) {
//            $table->increments('id');
            $table->string('course_id');
            $table->string('name');
            $table->string('credit_hour');
            $table->timestamps();

            $table->primary('course_id');
        });
    }


学生表迁移

public function up()
    {
        Schema::create('students', function (Blueprint $table) {
//            $table->increments('id');
            $table->string('roll_no');
            $table->string('name');
            $table->string('email');
            $table->string('address');
            $table->string('course_id');

            $table->timestamps();

            $table->primary('roll_no');
            $table->foreign('course_id')->references('course_id')->on('courses')->onDelete('cascade');
        });
    }


我如何显示课程名称和学生姓名

最佳答案

您可以将自定义选择添加到查询构建器,然后重命名现有列,以防止结果中排除列。

例:

DB::table('students')

    ->select(['*', DB::raw('students.name as student_name')])

    ->join(....


您可以像以下方式访问此属性:

@foreach ($data as $d)

    {{ $d->student_name }}

@endforeach


在foreach中使用dd($ d)并查看您现在可以访问哪些属性。

关于php - 加入laravel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37438620/

10-10 23:37