2017-11-12 3 views
1

Ich benutze Laravel 5 und versuche, meinen Kopf Beziehungen zu bekommen.Laravel - Viele zu viele Beziehung Setup

Ich habe 2 Tische, Studenten und Zimmer. Jedes Zimmer kann viele Studenten haben, und jeder Student kann viele Räume haben.

Wäre dies eine Viele-zu-Viele-Beziehung in beiden Richtungen? Benötige ich einen Pivot-Tisch, um dies zu erreichen?

Antwort

1

Ja, was Sie beschreiben, ist eine many-to-many-Beziehung, und dass Sie eine Pivot-Tabelle benötigen.

Ihre drei Tabellen würde wie folgt aussehen:(dies von Ihren tatsächlichen Tabellen anders aussehen könnte)

students

id (primary key) 
name 
age 

rooms

id (primary key) 
room_size 
bedroom_count 

Hinweis: durch Standard, der Name von Die Pivot-Tabelle besteht aus beiden Modellnamen (in Singularform) in alphabetischer Reihenfolge. Also in diesem Fall: Student + Room = room_student.

room_student (Drehtisch)

room_id (foreign key to 'rooms') 
student_id (foreign key to 'students') 

Pivot Tabelle Migration:

class CreateRoomStudentTable extends Migration 
{ 
    public function up() 
    { 
     Schema::create('room_student', function (Blueprint $table) { 
      $table->unsignedInteger('room_id'); 
      $table->unsignedInteger('student_id'); 

      // Primary key 
      $table->primary(['room_id', 'student_id']); 

      // Both foreign keys 
      $table->foreign('room_id') 
       ->references('id') 
       ->on('rooms') 
       ->onDelete('cascade'); 
      $table->foreign('student_id') 
       ->references('id') 
       ->on('students') 
       ->onDelete('cascade'); 
     }); 
    } 

    // ... 

Room und Student Modelle:

class Room extends Model { 
    // ... 
    public function students() 
    { 
     $this->belongsToMany(App\Student::class); 
    } 
} 

class Student extends Model { 
    // ... 
    public function rooms() 
    { 
     $this->belongsToMany(App\Room::class); 
    } 
} 
0

Ja können Sie viele zu viele Beziehung implementieren, und Sie werden definitiv Pivot-Tabelle für die Umsetzung von vielen zu vielen Beziehung benötigen. In diesem Fall können Sie eine Pivot-Tabelle wie room_student erstellen und die Spalten room_id und student_id hinzufügen. Verwenden Sie dann die Definitionsbeziehung mit der Methode "beltsToMany" in Ihren Modellen und denken Sie daran, die Anfügemethode zu verwenden, an der Sie die Funktionalität anhängen möchten.

1

Wäre dies eine Viele-zu-Viele-Beziehung in beiden Richtungen?

ja müssen Sie viele zu viele Beziehung in beiden Richtungen

Würde ich eine Pivot-Tabelle müssen dies erreichen?

ja

Sie mehr über viele zu viele Beziehung here