2016-11-27 2 views
0

У меня довольно простой вопрос об использовании сводных таблиц в laravel. Сначала я плохо расскажу о своей ситуации, у меня есть две таблицы: «Транспортные средства» и «События». Теперь я хотел бы создать таблицу, которая будет использоваться для хранения автомобилей, зарегистрированных на мероприятии. Теперь отношения между этими двумя таблицами состоят в том, что «Многие транспортные средства могут регистрироваться для многих событий» и наоборот. будет ли сводная таблица наилучшим способом выполнить это, и если бы это могло быть больше сингулярных значений в одной таблице?Laravel Таблица «Множество ко многим»

ответ

1

можно связать событие с несколькими транспортными средствами и транспортное средство для нескольких событий, делая что-то подобное с вашими моделями (не проверено):

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'); 
    } 
} 

событий. 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'); 
    } 
} 

Вам также понадобится файл переноса для поворотный стол:

... 

    /** 
    * 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'); 
    } 

    ... 

Затем вы можете использовать attach() и detach() связать транспортные средства с событиями, или наоборот.

+0

Можно ли совместить сводную таблицу с другой таблицей, например, у меня есть таблица с более общей информацией, и я хотел бы иметь там иностранец? – JoshuaJohnson2896

+0

Вы можете добавить другие поля в сводную таблицу, используя что-то вроде '$ this-> hasMany (Vehicle :: class) -> withPivot ('column1', 'column2');' которые можно получить с помощью '$ model-> pivot-> column1' – Winter

+0

Спасибо, это именно то, что я хотел знать – JoshuaJohnson2896