基于第三张表以雄辩的形式定义关系

Posted

技术标签:

【中文标题】基于第三张表以雄辩的形式定义关系【英文标题】:define realtion in eloquent orm based on third table 【发布时间】:2014-03-16 16:07:06 【问题描述】:

我有 3 个表,我如何根据绑定它们的合同来定义分类和用户之间的关系?

Taxonomy  : tax_id,name
Users     : user_id,name
contracts : tax_id,user_id,start_time,end_time

SQL: SELECT * FROM taxonomy t where t.tax_id in(select tax_id from contracts where user_id = 3 and DATE() between Start_time and end_time)

但是如何在 eloquent orm 中定义这种关系呢?

【问题讨论】:

【参考方案1】:

使用合同作为数据透视表定义分类和用户之间的多对多关系,更多信息请参见docs

要访问 start_time 和 end_time,您必须在定义 relationship 时指定它们,例如在分类模型中:

class Taxonomy extends Eloquent 

  public function users()
  
      return $this->belongsToMany('User')->withPivot('start_time', 'end_time');
  


【讨论】:

start_time 和 end_time 的条件呢?请问可以提供代码示例来完成答案吗? 我已经更新了答案,包括分类模型中的额外字段,您在指定用户关系时也应该声明它们。

以上是关于基于第三张表以雄辩的形式定义关系的主要内容,如果未能解决你的问题,请参考以下文章

第六章创建多对多关系的三种方式

Django框架之ORM的相关操作之多对多三种方式

如何借助 Oracle 中的第三张表将数据从源表更新到目标表?

Hibernate学习笔记 — 多对多关系映射

表与表之间的关系

网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!