如何设置与中间表的Laravel多对多关系,中间表不仅是数据透视表,而且还表示模型



我有一个表格,如下所示;

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

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

  • offer有多个offer_requests
  • offer有多个clients(通过offer_requests(
  • client有多个offer_requests
  • client有多个offers(通过offer_requests(
  • offer_request属于一个offer
  • offer_request属于一个client

我能弄清楚的是;

  • offer有很多offer_requests ---反转:offer_request属于offer
  • client有很多offer_requests ---反转:offer_request属于client

我无法弄清楚的;

  • offer有多个clientsoffer_requests
  • client有多个offersoffer_requests

如果我仔细阅读手册,hasManyThrough关系在这里不起作用。我认为这应该是一种多对多的关系。

如果我是对的:如何将offer_requests表用作中间/数据透视表?
如果我不是:如何解决这个问题?


更新:工作

我现在已将关系设置如下;

型号: 报价

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 IlluminateDatabaseEloquentRelationsPivot;
class OfferRequest extends Pivot
{
    protected $table = 'offer_requests';
}

查看文档

定义自定义中间表模型

你可以让它成为二对多的关系

最新更新