TP6.0远程一对一模型关联(跨表关联)的实际运用

TP6的远程一对一模型关联其实就是一张表通过中间一张表,关联到第三张表,这在我们实际的项目开发中还是比较常见的,网上关于TP6对这方面的资料也很少,所以写一下自己的实际运用方法。

由于TP6的手册对远程一对一模型关联(跨表关联)的介绍比较简单,并且官方文档介绍的使用方法对数据库设计是有要求的。

按官方文档介绍的写法是:

那么官方的数据库设计其实是这样的:关联键都是设计在被关联表,比如User表关联Profile表,那么他会有个user_id设计在Profile表,profile_id设计在Card表,这种情况下,按照官方文档的写法是可以运行的。

但是项目的数据库一旦设计完是很难更改的,我现在碰到的情况是:

我有一张outStorage表,关联Order表,order_id设计在了outStorage表:

然后,order表又关联customer表,customer_id设计在了order表:

customer表:

由于项目要求,平常用id作主键现在全部用nid作为主键了。

那么我用outStorage表通过order_id关联到order表,再用order表的customer_id关联到customer表,进而查到数据就应该这样写了:

public function customer(){
        return $this->hasOneThrough(Customer::class,Order::class,"nid","nid","order_id","customer_id");
}

参数是:被关联表模型,中间表模型,中间表id,被关联表id,中间表关联字段,被关联表关联字段。

注意:如果在控制器里面用with查询的时候,闭包方法里面的语句如果不是很清楚原理就不要乱写,否则很容易报错:

以上。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y_w_x_k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值