关联表上的Laravel模型关系

关联表上的Laravel模型关系,laravel,laravel-5,laravel-5.4,Laravel,Laravel 5,Laravel 5.4,所以,我有一个文件模型,我有一个依赖模型,它将指示一个特定的文件实例是否依赖于另一个。想想包管理。依赖项表非常简单: id PRIMARY file_id INTEGER UNSIGNED depends_on_file_id INTEGER UNSIGNED files表还使用id作为主键 但是,我还没有找到在模型上建立关系的正确方法。我想应该是: public function deps() { $this-&g

所以,我有一个文件模型,我有一个依赖模型,它将指示一个特定的文件实例是否依赖于另一个。想想包管理。依赖项表非常简单:

id                 PRIMARY
file_id            INTEGER UNSIGNED
depends_on_file_id INTEGER UNSIGNED
files表还使用id作为主键

但是,我还没有找到在模型上建立关系的正确方法。我想应该是:

public function deps()
    {
        $this->belongsToMany('App\File', 'dependencies', 'file_id', 'id');
    }
但当我尝试使用它时:

>>> $f = App\File::find(2);
=> App\File {#706
     id: 2,
     {redacted irrelevant properties here},
   }
>>> $f->deps();
=> null
一点也没有收集。有一行种子数据,其中文件\u id 2依赖于文件\u id 1


我在这里遗漏了什么呢?

从您设计表的方式来看,这里不是多对多,而是一对多的关系:一个文件可以有许多依赖关系。依赖项表上有两个外键这一事实并不意味着多对多,因为两个外键都引用相同的表文件

一旦您正确设置了,就可以开始了

File.php模型

Department.php模型


上面的关系没有经过测试,但你明白了。

这仍然返回一个空集,但目前我正在通过执行例如$d=App\Dependency::where'file\u id',2->get;来解决它;。不过,我很欣赏这种理智的检查,我从模型开始已经有足够长的时间了,关系没有任何意义。似乎关系设置不正确。正如我写的,我没有测试它。但我得说你走的路是对的。
public function departments() {
    return $this->hasMany('App\Department', 'file_id', 'id');
}
public function files() {
    return $this->belongsTo('App\File');
}