跟进这个帖子 Three-way many-to-many relationship in Laravel
我正在尝试重现这个例子,因为我发现这是通过Eloquent实现三向多对多关系的一种巧妙的方法。
但是当我尝试检索任何内容时出现错误:
$user->relations()->where('student_id', $student)->first()->plan();
Tinker告诉我应该有一个数据透视表relation_user。 如果是这种情况,那么解决方案就不会成为"整洁"再吸引人了。 必须有一些我缺少的东西,这个帖子没有显示迁移,有没有办法重现 Carlos Herrera Plata 在这个帖子上说的内容?
修改:
这是我实施它的方式链接的例子
class Dftstudent extends Model
{
function relations() {
return $this->hasMany(Dftrelation::class);
}
}
class Dftplan extends Model
{
function relations() {
return $this->hasMany(Dftrelation::class);
}
}
class Dftuser extends Model
{
function relations() {
return $this->hasMany(Dftrelation::class);
}
}
在关系模型中
class Dftrelation extends Model
{
function student() {
return $this->belongsToMany(Dftstudent::class);
}
function user() {
return $this->belongsToMany(Dftuser::class);
}
function plan() {
return $this->belongsToMany(Dftplan::class);
}
//
}
关系表中的迁移:
Schema::create('dftrelations', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('student_id')->unsigned();
$table->integer('plan_id')->unsigned();
$table->timestamps();
});
Schema::table('dftrelations', function(Blueprint $table) {
$table->foreign('user_id')->references('id')->on('dftusers');
$table->foreign('student_id')->references('id')->on('dftstudents');
$table->foreign('plan_id')->references('id')->on('dftplans');
});
而其他型号Dftstudent,Dftplan,Dftuser只包含id和名称。
我填写了以下数据:
INSERT INTO dftusers (name) VALUES ("admin1"), ("admin2");
INSERT INTO dftstudents (name) VALUES ("Pete"), ("Sam");
INSERT INTO dftplans (name) VALUES ("plan A"), ("plan B");
INSERT INTO dftrelations (user_id, student_id, plan_id) VALUES (1,1,1), (2,2,2);