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

标签 php laravel relationship

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

Table: offers          (Model: Offer)
  id

Table: clients         (Model: Client)
  id

Table: offer_requests  (Model: OfferRequest)
  id
  offer_id
  client_id

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

  • offer 有多个 offer_requests
  • offer 有多个客户(通过 offer_requests)
  • 客户端有多个offer_requests
  • 客户有多个报价(通过offer_requests)
  • offer_request 属于一个 offer
  • offer_request 属于一个客户

我能弄清楚的是;

  • offer hasMany offer_requests --- 逆:offer_request ownsTo offer
  • client hasMany offer_requests --- 逆:offer_request属于client

我不明白;

  • offer 通过 offer_requests 拥有多个客户
  • 客户通过offer_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);
    }
}

型号:OfferRequest

use Illuminate\Database\Eloquent\Relations\Pivot;

class OfferRequest extends Pivot
{
    protected $table = 'offer_requests';
}

最佳答案

look at docs

定义自定义中间表模型

关于php - 如何设置 Laravel 与中间表的多对多关系,中间表不仅是数据透视表,还代表模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51758791/

相关文章:

mysql - Laravel 5.1 Eloquent orWhere 子查询

mysql - 随机连接3个表中的记录

php - 显示特定记录的详细信息

php - 浏览器不会从 onclick 事件设置 cookie

laravel - Laravel自定义错误

php - Laravel Eloquent 根据关系字段只检索某些行

php - 一对多与mysql中的特定数字

laravel - 从数据表的关系中获取一条记录

php - 仅执行 PHP 文件 - 在 MySQL 中收集数据

javascript - datatable.columns().search().draw() 在服务器端 php 中请求或发布什么?