【发布时间】:2021-10-30 11:51:21
【问题描述】:
我在用户和课程之间创建了多对多关系。模型和迁移如下。
用户模型:
public function courses()
{
return $this->belongsToMany(Course::class)->withTimestamps();
}
课程模式:
public function users()
{
return $this->belongsToMany(User::class, 'course_user', 'course_id', 'user_id')->withTimeStamps();
}
问题是我找不到像这样在 Laravel 中的迁移文件或数据透视表中实现复合主键的方法,
Schema::create('course_user', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->integer('course_id')->unsigned()->index()->primary();
$table->foreign('course_id')->references('id')->on('courses');
$table->integer('user_id')->unsigned()->index()->primary();
$table->foreign('user_id')->references('id')->on('users');
});
在完成上述编码后,当我调用php artisan migrate:refresh 时,出现一个错误,显示在链接表中执行了多个主键。所以我对这个问题做了一个研究,发现ELOQUENT不支持复合主键,如本论坛所述:link to the forum
还有其他方法可以解决这个问题吗? 我设法编写了一段代码来检测数据透视表中的现有条目或控制器内部的多对多关系,并避免新的重复条目。
【问题讨论】: