为了账号安全,请及时绑定邮箱和手机立即绑定

我如何从Laravel的中间表(多对多关系)中获取数据

我如何从Laravel的中间表(多对多关系)中获取数据

PHP
aluckdog 2021-05-06 13:21:59
我想阅读培训师和课程表之间的中间表的内容,以便能够为给定培训师标记活动课程的书架,我该怎么办?在这里,您可以查看培训 师表http://prntscr.com/nhcrl4在这里您可以查看课程表 http://prntscr.com/nhcrvp在这里,您可以查看course_trainer(中级)表 http://prntscr.com/nhcsek我想到了使用三元,你建议我吗?多谢这是表格<div class="container">  <div class="row">    <div class="col-lg-12">      <form class="form-group" action="{{route('trainers.update', $trainer->id)}}" method="post" enctype="multipart/form-data">          @csrf          @method('PUT')          <div class="form-group">            <label for="name">Nome</label>            <input type="text" class="form-control" name="name" value="{{$trainer->name}}">          </div>          <div class="form-group">            <label for="surname">Cognome</label>            <input type="text" class="form-control" name="surname" value="{{$trainer->surname}}">          </div>          <div class="form-group">            <label for="description">Descrizione</label>            <textarea class="form-control" name="description" rows="8" cols="80">{!! $trainer->description !!}</textarea>          </div>          @foreach ($courses as $course)            <div class="form-check form-check-inline mb-2">              <input name="course_id[]" class="form-check-input" type="checkbox" value="{{$course->id}}">              <label class="form-check-label" for="course_id">{{$course->name_course}}</label>            </div>          @endforeach          <div class="form-group">            <img src="{{asset('storage/'.$trainer->image)}}" alt="">          </div>这是控制器中的编辑功能public function edit($id)    {        $trainer = Trainer::find($id);        $courses = Course::all();        return view('trainers.edit', compact('trainer','courses'));    }这是控制器中的更新功能    public function update(Request $request, Trainer $trainer)    {      $data = $request->all();      $trainer->update($data);      $trainer->courses()->sync($data['course_id']);      return redirect()->route('trainers.admin');    }
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我在不改变模型的情况下解决了问题...就足够了


          @foreach ($courses as $course)

            <div class="form-check form-check-inline mb-2">

              <input name="course_id[]" class="form-check-input" type="checkbox" value="{{$course->id}}" @foreach ($trainer->courses as $value)

                {{($course->id == $value->pivot->course_id) ? 'checked' : ''}}


              @endforeach>


              <label class="form-check-label" for="course_id">{{$course->name_course}}</label>


            </div>

          @endforeach


查看完整回答
反对 回复 2021-05-21
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这是训练师模型


<?php


namespace App;


use Illuminate\Database\Eloquent\Model;


class Trainer extends Model

{

    protected $fillable = ['name','surname','description','image'];


    public function courses(){

      return $this->belongsToMany(Course::class)->withTimestamps();

    }


}

这是课程模型


<?php


namespace App;


use Illuminate\Database\Eloquent\Model;


class Course extends Model

{

  protected $fillable = ['name_course','description_course','logo_course'];



  public function trainers(){

    return $this->belongsToMany(Trainer::class)->withTimestamps();

  }

}


查看完整回答
反对 回复 2021-05-21
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

这是训练师模型


public function courses(){

  return $this->belongsToMany('App\Course', 'course_trainer ', 'trainer_id', 'course_id')->withTimestamps();

}

这是课程模型


public function trainers(){

  return $this->belongsToMany('App\Trainer', 'course_trainer ', 'course_id', 'trainer_id')->withTimestamps();

}

belongsToMany() 方法4个参数,第一个是要链接的模型的位置,第二个是数据透视表的名称,第三个是当前模型的外键,第四个是另一个模型的外键。


现在,您可以在表单中执行以下操作


<input name="course_id[]" class="form-check-input" type="checkbox" @if($course->pivot->trainer_id == $trainer->id) "checked='' " @endif value="{{$course->id}}">



查看完整回答
反对 回复 2021-05-21
  • 3 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信