2017-06-18 105 views
0

所以,我有一个File模型,并且我有一个Dependency模型,它将指示特定的File实例是否依赖于另一个模型。 (认为​​包管理。)的dependencies表是非常简单的:关联表上的Laravel模型关系

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 

没有得到收集的。有一行种子数据,其中file_id 2 depends_on_file_id 1

我在这里错过了什么?

回答

1

通过您设计表格的方式说,它不是多对多的,但是一对多您有这样的关系:一个文件可以有很多依赖关系。在dependencies表中有两个外键的事实并不是多对多的,因为两个外键都引用同一个表 - files

一旦你正确设置了relation,你就很好。

File.php模式

public function departments() { 
    return $this->hasMany('App\Department', 'file_id', 'id'); 
} 

Department.php模式

public function files() { 
    return $this->belongsTo('App\File'); 
} 

上面并没有进行测试的关系,但你的想法。

+0

这仍然是返回一个空集,但暂时我正在通过做'$ d = App \ Dependency :: where('file_id',2) - > get(); 。尽管我很欣赏理智检查,但我始终在模特身上做了足够长的时间,以至于人际关系没有任何意义。 –

+0

似乎关系错误地设置。正如我写的,我没有测试它。但我会说你走在正确的道路上。 – lesssugar