我有两个表 routes
和 stations
和一个数据透视表 route_station
。查看表格详情
路由表
id, number, code
车站表
id, name, code
route_station 表(枢轴)
id, route_id, station_id, next_station_id, interchange_station_id, sation_order, distance, duration
station_id
, next_station_id
, interchange_station_id
都是 satations
表 id架构
车站
Schema::create(
'stations',
function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->index();
$table->string('code')->index();
$table->text('info');
$table->string('photo')->nullable();
$table->timestamps();
}
);
路线
Schema::create(
'routes',
function (Blueprint $table) {
$table->bigIncrements('id');
$table->smallInteger('number')->unsigned()->unique();
$table->string('code')->unique();
$table->timestamps();
$table->unique(['number', 'code'], 'routes_unique_columns');
}
);
Route_Station - 枢轴
Schema::create(
'route_station',
function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('route_id')->unsigned();
$table->bigInteger('station_id')->unsigned();
$table->bigInteger('next_station_id')->unsigned()->nullable();
$table->bigInteger('interchange_id')->unsigned()->nullable();
$table->integer('station_order');
$table->float('distance');
$table->integer('duration');
$table->timestamps();
$table->foreign('route_id')
->references('id')
->on('routes')
->onDelete('restrict');
$table->foreign('station_id')
->references('id')
->on('stations')
->onDelete('restrict');
$table->foreign('next_station_id')
->references('id')
->on('stations')
->onDelete('restrict');
$table->foreign('interchange_id')
->references('id')
->on('routes')
->onDelete('restrict');
}
);
在管理区域,总共将有三个部分来管理车站和路线。
这意味着我不会在创建
station
或 route
时将记录插入到数据透视中,而是在上面提到的第 3 页之后的任何时间。我现在有两个模型
Station
和 Route
并设置如下关系。车站模型
class Station extends Model
{
public function routes()
{
return $this->belongsToMany('App\Route');
}
public function route()
{
return $this->belongsTo('App\Route');
}
}
路线模型
class Route extends Model
{
public function stations()
{
return $this->belongsToMany('App\Station');
}
public function station()
{
return $this->belongsTo('App\Station');
}
}
所以现在的问题是,当
role_station
和 station
记录已经存在时,我不知道如何将记录插入到数据透视表中以将所有列填充到 route
表中。我曾尝试使用
attach()
但它给出了以下错误所以我需要帮助
最佳答案
默认情况下,pivot
对象上只会出现模型键。如果数据透视表包含额外的属性,则必须在定义关系时指定它们:
return $this->belongsToMany('App\Route')->withPivot('next_station_id', 'interchange_station_id', 'station_order', 'distance', 'duration');
关于php - 具有多列的 Laravel 数据透视表需要稍后插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60317978/