簡體   English   中英

如何從laravel中的中間表(多對多關系)中獲取數據

[英]How can i get data from intermediate table (many to many relationship) in laravel

我想閱讀培訓師和課程表之間的中間表的內容,以便能夠標記給定培訓師的活動課程的方框,我該怎么辦?

在這里你可以查看培訓師表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>

          <div class="custom-file">
            <input type="file" class="custom-file-input" name="image">
            <label class="custom-file-label" for="image">Scegli un'immagine</label>
            <div class="invalid-feedback"><strong>N.B.</strong> dimensione consigliata 160px x 160px</div>
          </div>

          <div class="form-group">
            <input type="submit" class="form-control" value="MODIFICA ISTRUTTORE">
          </div>
        </form>
    </div>
  </div>
</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');
    }

這是培訓師模型

<?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();
  }
}

這是培訓師模型

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}}">

我在不改變模型的情況下解決了這個問題......這就足夠了

          @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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM