php - 是否可以将枢轴上的表格与雄辩的 ORM 相关联?
问题描述
这些是我的桌子many-to-many
:
products
并且suppliers
,但是我需要将 pivot(product_supplier) 与名为payment_supplier
.
产品型号
public function suppliers(){
return $this->belongsToMany('App\Supplier');
}
供应商模式
public function products(){
return $this->belongsToMany('App\Product');
}
但我需要将 pivot product_supplier 与 payment_supplier 表相关联,就像图中描述的那样
解决方案
在这种情况下,您可以使用枢轴模型。
# Product Model
public function suppliers() {
return $this->belongsToMany(Supplier::class)->using(ProductSupplier::class);
}
# Supplier Model
public function products(){
return $this->belongsToMany(Product::class)->using(ProductSupplier::class);
}
# ProductSupplier Pivot Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Relations\Pivot;
class ProductSupplier extends Pivot
{
public function payment_supplier()
{
return $this->hasMany(PaymentSupplier::class);
}
}
但是,这样做有一个大问题:您不能急切地加载枢轴的关系。不是没有覆盖(或包)。
另一种方法是使用hasManyThrough
# Product Model
public function suppliers()
{
return $this->belongsToMany(Supplier::class)->using(ProductSupplier::class);
}
public function payment_suppliers()
{
return $this->hasManyThrough(PaymentSupplier::class, ProductSupplier::class);
}
# Supplier Model
public function products()
{
return $this->belongsToMany(Product::class)->using(ProductSupplier::class);
}
public function payment_suppliers()
{
return $this->hasManyThrough(PaymentSupplier::class, ProductSupplier::class);
}
这为您提供了单个供应商/产品的每个 PaymentSupplier,因此您需要应用某种过滤。
推荐阅读
- javascript - 如何将值从模板传递到 ts 函数
- python - Flask-mail 正在尝试使用 localhost 作为邮件服务器,而不是配置的 SMTP 服务器
- python - 如何从 sklearn 为多列反转标签编码器?
- java - 如何从 Sql 中插入和获取数据
- android - 用文字描边
- android - Mapbox IllegalStateException:在加载/已加载较新样式时调用 getSourceAs
- youtube-api - 使用 oembed 检索数据时,Youtube 发送错误的缩略图
- node.js - API 请求/响应形状的单一事实来源,包括 JSON 模式、TypeScript 类型和运行时验证器?
- cloud - Azure 扩展.json
- javascript - 播放视频后自动关闭模式。超时功能不起作用