我有一个关于在laravel中使用数据透视表的相当简单的问题。首先,我提供一些有关我的情况的信息,我有两个表名为“车辆”和“事件”。现在我想创建一个用于存放已注册事件的车辆的表。现在,这两个表之间的关系将是“许多车辆可以注册多个事件”,反之亦然。将Pivot表作为实现此目的的最佳方法,如果是这样,可以在同一个表中使用更多的奇异值吗?
答案 0 :(得分: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');
}
}
<强> 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');
}
...