代码之家  ›  专栏  ›  技术社区  ›  Ramon Bakker

如何建立与中间表的多对多关系,中间表不仅是一个透视表,而且代表一个模型

  •  0
  • Ramon Bakker  · 技术社区  · 7 年前

    我有一张桌子,看起来像下面的;

    Table: offers          (Model: Offer)
      id
    
    Table: clients         (Model: Client)
      id
    
    Table: offer_requests  (Model: OfferRequest)
      id
      offer_id
      client_id
    

    所以,关系应该是这样的;

    • offer 有多个 offer_requests
    • 提供 有多个 clients (通过 提供请求 )
    • client 有多个 提供请求
    • 客户 有多个 offers (通过 提供请求 )
    • offer_request 属于某人 提供
    • 报价请求 属于某人 客户

    我能想到的是;

    • 提供 哈斯曼 提供请求 ---反向: 报价请求 归属于 提供
    • 客户 哈斯曼 提供请求 ---反向: 报价请求 归属于 客户

    我想不出来的;

    • 提供 有多个 客户 通过 提供请求
    • 客户 有多个 提供 通过 提供请求

    如果我仔细阅读手册,草率的关系在这里是行不通的。我认为这应该是一种多对多的关系。

    如果我是对的:我如何使用 提供请求 表作为中间表/透视表?
    如果我不是:怎么解决这个问题?


    更新:工作

    我现在已经建立了如下关系:;

    型号:报价

    class Offer extends Model
    {
        public function clients()
        {
            return $this->belongsToMany(Client::class, 'offer_requests')->using(OfferRequest::class);
        }
    }
    

    型号:客户机

    class Client extends Model
    {
        public function offers()
        {
            return $this->belongsToMany(Offer::class, 'offer_requests')->using(OfferRequest::class);
        }
    }
    

    型号:报价

    use Illuminate\Database\Eloquent\Relations\Pivot;
    
    class OfferRequest extends Pivot
    {
        protected $table = 'offer_requests';
    }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Usman Jdn    7 年前

    look at docs

    定义自定义中间表模型

        2
  •  2
  •   Abdul Fattah Boshi    7 年前

    你可以建立一对多的关系

    推荐文章