2016-11-27 6 views
0

Ich habe eine ziemlich einfache Frage über die Verwendung von Pivot-Tabellen in Laravel. Zuerst gebe ich einige Informationen über meine Situation, ich habe zwei Tabellen Namen "Fahrzeuge" und "Events". Jetzt möchte ich eine Tabelle erstellen, die für Fahrzeuge verwendet wird, die sich für eine Veranstaltung registriert haben. Nun würde die Beziehung zwischen diesen beiden Tabellen lauten: "Viele Fahrzeuge können sich für viele Ereignisse registrieren" und umgekehrt. Wäre eine Pivot-Tabelle der beste Weg, um dies zu erreichen, und wenn ja, könnten singulärere Werte in derselben Tabelle enthalten sein?Laravel Viele-zu-viele Pivot-Tabelle

Antwort

1

Sie können ein Ereignis mit mehreren Fahrzeugen verbinden und um ein Fahrzeug mehrere Ereignisse durch so etwas wie dies mit Ihren Modellen zu tun (nicht getestet):

Vehicle.php

<?php 

namespace App; 

use App\Event; 
use Illuminate\Database\Eloquent\Model; 

class Vehicle extends Model 
{ 

    ... 


    /** 
    * Get the events that this vehicle belongs to. 
    * 
    * @return \App\Event 
    */ 
    public function events() 
    { 
     return $this->belongsToMany(Event::class, 'vehicle_event'); 
    } 
} 

Ereignis. php

<?php 

namespace App; 

use App\Vehicle; 
use Illuminate\Database\Eloquent\Model; 

class Event extends Model 
{ 

    ... 


    /** 
    * Get the vehicles that this event has. 
    * 
    * @return \App\Vehicle 
    */ 
    public function events() 
    { 
     return $this->hasMany(Vehicle::class, 'vehicle_event'); 
    } 
} 

Sie brauchen auch eine Migrationsdatei für die Pivot-Tabelle:

... 

    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('vehicle_event', function(Blueprint $table) 
     { 
      $table->integer('vehicle_id')->unsigned()->index(); 
      $table->foreign('vehicle_id')->references('id')->on('vehicles'); 
      $table->integer('event_id')->unsigned()->index(); 
      $table->foreign('event_id')->references('id')->on('events'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::dropIfExists('vehicle_event'); 
    } 

    ... 

Dann können Sie attach() und detach() verwenden Fahrzeuge mit Ereignissen zu verbinden oder umgekehrt.

+0

Wäre es möglich, den Pivot-Tisch mit einem anderen Tisch zu kombinieren, zum Beispiel habe ich eine Tabelle mit allgemeineren Informationen, und ich möchte auch das Ausland dort haben? – JoshuaJohnson2896

+0

Sie können andere Felder zur Pivot-Tabelle hinzufügen, indem Sie etwas wie $ this-> hasMany (Vehicle :: class) -> withPivot ('column1', 'column2') verwenden; 'auf das mit' $ model-> zugegriffen werden kann pivot-> column1' – Winter

+0

Danke, das ist genau das, was ich wissen wollte – JoshuaJohnson2896