php - 通过使用 Eloquent 关系查找两个连接之外的 ID 来获取结果
问题描述
我需要使用两个连接之外的 id 从一个表中获取行。我知道我可以使用join('table_name')
,但我正在尝试使用模型名称而不是原始表名称。
我试图shipping_shipment.*
通过加入order_item_join_shipping_shipment
然后加入order_item
和过滤来选择where order_item.order_id = x
我在 ShippingShipment 类中尝试过这个,但我无法弄清楚。
return $this->hasManyThrough(OrderItem::class, ShippingShipment::class, 'shipment_id', 'order_item_id', 'id', 'id');
一个订单中有很多商品,并且有很多发货。我需要收货。
每个订单可以有不止一件货物 - 物品来自不同的地方。
每件物品可以有不止一个货件 - 如果有东西被退回并需要再次运输。
我要从中获取行的表 shipping_shipment 通过连接表 order_item_join_shipping_shipment 连接到 order_item。该连接表具有 order_item_id。然后我需要加入 order_item 表,以便我可以搜索 order_item.order_id
表order_item模型 OrderItem
+-----+---------------+
| id | order_id |
+-----+---------------+
| 6 | 13464 |
| 8 | 13464 |
| 9 | 13464 |
+-----+---------------+
表order_item_join_shipping_shipment模型 OrderItemJoinShippingShipment
+-----+---------------+-------------+
| id | order_item_id | shipment_id |
+-----+---------------+-------------+
| 1 | 6 | 12 |
| 1 | 9 | 12 | two items in one shipment
| | | |
| 2 | 8 | 13 |
| 3 | 8 | 14 | one item was returned so shipped again
+-----+---------------+-------------+
表shipping_shipment不需要描述,只是说它有一个 id 列。
如果我用 MySQL 来做,它看起来像这样
SELECT ss.*, oiss.order_item_id FROM
order_item_join_shipping_shipment AS oiss
INNER JOIN shipping_shipment AS ss ON (oiss.shipment_id = ss.id)
INNER JOIN order_item AS oi ON (oiss.order_item_id = oi.id)
WHERE oi.order_id = 13464
解决方案
据我所知,您正在使用 ShippingShipment 和 OrderItem 之间的数据透视表。如果我对您的理解正确,您希望获取连接到 ShippingShipment 的 OrderItems,如果是这种情况,您可以执行以下操作:
Make 在这两种模型中都属于许多关系,例如:
ShippingShipment:
public function orderItems(){
return $this->belongsToMany(OrderItem::class, 'table_name', 'column_id');
}
订单项:
public function shippingShipment(){
return $this->belongsToMany(ShippingShipment::class, 'table_name', 'column_id');
}
然后您可以通过键入以下查询来获得所需的结果:
ShippingShipment::find(1)->with('orderItems')->get();
OrderItem::find(13464)->with('shippingShipments')->get();
注意:您可以使用orderItems:id,order或shippingShipment:id,some_other_field进行更优化的查询
推荐阅读
- python - 在时间范围内查找现值,熊猫
- google-sheets - 如何在谷歌表格中删除这种表格
- nginx - 为 yii 2 设置 nginx
- django - Django Rest Framework - 当获取模型类型的对象不是 JSON 可序列化时,如何从响应中返回模型的所有信息?
- applescript - 基本 do shell 脚本在 applescript 中给出错误
- google-apps-script - 将电子表格中的多行复制到另一个电子表格
- r - 如何使 actionButton 将 code.R 运行到上传的数据集?
- django - Django-allauth 确认电子邮件消息重定向到不同的 URL
- batch-file - 批处理文件-命令-重命名文件夹的动态输入
- arrays - 如何在 x86 程序集中使用寄存器值作为数组元素偏移量?