没有外键的laravel关系

Posted

技术标签:

【中文标题】没有外键的laravel关系【英文标题】:laravel relationship without foreign key 【发布时间】:2019-07-20 02:37:20 【问题描述】:

想象在 Laravel 项目中,我有 Traking OrderDriver Eloquent 模型。

trakings 表中,我有列tracking_key。在drivers 表中,我还有tracking_key 列。

例如如果司机tracking_key是x,那么tracking_keyx在trakings表中有很多跟踪信息。

所以现在我有$order = new Order::with('driver');它工作正常,但现在在这个查询中,我也想从trakings 表中获取信息(跟踪与驱动程序的tracking_key 匹配的trakings 表中的信息)。

如您所见,我不能拥有Driver::with('trakings') 类型的关系,因为我在这两个表中没有外键。

我试过了:

$order = new Order::with(['driver' => function($query)
    $query->join('trackings', 'trackings.tracking_key', '=', 'drivers.tracking_key');
])

但结果是 stranje,我认为这不起作用。那我该怎么办?

【问题讨论】:

【参考方案1】:

您可以像这样使用嵌套的急切加载:

Order::with('driver.trackings')

这将是与订单相关的加载驱动程序和与驱动程序相关的跟踪

【讨论】:

我不能在驱动程序中建立 tracking() 关系

以上是关于没有外键的laravel关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 与复合外键的关系

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

Laravel - 如何将外键用于具有识别外键的表?

将包含外键的列添加到 Laravel 生产中的现有表中

Laravel :: 更新外键的最佳方法

具有自定义外键的 Laravel 多态