首页 > 解决方案 > 如何使用数据透视表显示不同表格的列?

问题描述

我是 Laravel 的初学者,现在我正在做这个项目,但我在这一点上停留了几天。这是我想做的,我想显示导师选择的日期和时间段标签!

这是我的表格及其关系 https://imgur.com/WMMwhHK

日模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Day extends Model
{
    protected $guarded =  ['id', '_token']; 
}

时隙模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Timeslot extends Model
{
    protected $guarded = ['id', '_token'];
    
    public function Tutor()
    {
        return $this->hasMany(Tutor::class);
    }
}

Tutor_availability 模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tutor_availability extends Model
{
    protected $fillable = ['tutor_id', 'timeslot_id', 'day_id'];
    protected $guarded =  ['id', '_token'];
    
    public function tutor()
     {
        return $this->belongsTo('App\Tutor');
     }
    public function day()
     {
        return $this->belongsTo('App\Day');
     }
    public function timeslot()
     {
        return $this->belongsTo('App\Timeslot');
     }
}

utor_availabilities 迁移

    public function up()
    {
        Schema::create('tutor_availabilities', function (Blueprint $table) {
            // $table->bigIncrements('id');
            $table->integer('day_id')->unsigned();
            $table->foreign('day_id')->references('id')->on('days')->onDelete('cascade');
            $table->integer('timeslot_id')->unsigned();
            $table->foreign('timeslot_id')->references('id')->on('timeslots')->onDelete('cascade');
            $table->integer('tutor_id')->unsigned();
            $table->foreign('tutor_id')->references('id')->on('tutors')->onDelete('cascade');
            $table->timestamps();
            $table->primary(['day_id', 'timeslot_id', 'tutor_id']);
        });
    }

导师控制器

  public function index()
    {
        $tutors = Tutor::latest()->paginate(5);



        $tutor_availabilities = Tutor_availability::all();
        

        return view('tutors.index', [
            'tutors' => $tutors, 
            'tutor_availabilities' => $tutor_availabilities    
        ]);
    }

看法

                   <tr>
               <th>Days</th> <th> Timings</th>
           </tr>
           <tr>
                        <td>
                            {{$tutor_availabilities->day->label}}
                        </td> 
                        <td>
                            {{$tutor_availabilities->timeslot->label}}
                        </td>
             </tr>

标签: laravellaravel-6

解决方案


把它放在你的 Tutor_availability 模型中

     public function day()
         {
            return $this->belongsTo(Day::class);
         }
    public function timeslot()
         {
            return $this->belongsTo(Timeslot:class);
         }

然后在控制器中

    public function index()
        {
            $tutor_availabilities = Tutor_availability::all();
            return view('tutors.index',
     compact('tutor_availabilities')) ;
        }

然后在视野中

    <table>
    @foreach ($tutor_availabilities as $tutor_available) 
    <tr><td>
                            {{$tutor_available->day->label}}
                        </td> 
                        <td>
                            {{$tutor_available->timeslot->label}}
                        </td></tr>
    @endforeach
    </table>

推荐阅读