Laravel关系,一个数据库有两个外键

Posted

技术标签:

【中文标题】Laravel关系,一个数据库有两个外键【英文标题】:Laravel relationship, one database has two foreign keys 【发布时间】:2017-09-15 19:51:30 【问题描述】:

这是我的位置表:

ID
Name
Type

这是Routes表:

ID
Location_start(int)
Location_distination(int)
Distance
Rate

我尝试在这两个表之间建立关系,因此我可以在 foreach 循环中获取location_startlocation_distination 的位置名称。我试过了:

public function locationStart()

$this->belongsTo('App\Route', 'location_start');

public function locationDistination()

$this->belongsTo('App\Route', 'location_distination');

但它并没有以这种方式工作。

【问题讨论】:

请 a) 告诉我们哪些列(如果有)是外键以及它们引用的内容 b) 您将此(发布的关系)放入哪个模型中。 尝试使用hasOne 而不是belongsTo @devk Location_start 和 Location_distination.在位置模型中 然后只需将->belongsTo('App\Route', 'location_start') 更改为->hasMany('App\Route', 'location_start')。 loc_end 也一样。您定义了逆向(您将在 Route 模型中使用 belongsTo,因为 routes 表具有外键(因此“属于”)。 看看这个答案***.com/a/25061868/4668162 ,确保您的迁移或表构造正确 【参考方案1】:

您的路线类应如下所示:

class Route extends Model

    public function locationStart()
    
        $this->belongsTo(Location::class, 'location_start');
    

    public function locationDestination()
    
        $this->belongsTo(Location::class, 'location_distination');
    

那么你应该可以做到:

$route = Route::with('locationStart', 'locationDestination')->find(20);
$route->locationStart->Name;
$route->locationEnd->Name;

【讨论】:

以上是关于Laravel关系,一个数据库有两个外键的主要内容,如果未能解决你的问题,请参考以下文章

渴望加载 Laravel 5 与两个外键的多对多关系

Laravel 雄辩的关系有很多两个外键错误

Laravel中具有两个外键字段的数据库一对多

在 Laravel 关系上修改外键

Laravel Eloquent 关系与多个带有“OR”的外键

Laravel 关系和外键约束