Laravel超过两个多对多关系

时间:2017-10-11 12:32:31

标签: laravel laravel-5 eloquent

跟进这个帖子 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);

0 个答案:

没有答案