Php 如何以雄辩的方式连接人际关系?

Php 如何以雄辩的方式连接人际关系?,php,laravel,eloquent,Php,Laravel,Eloquent,我遇到了一个问题,我有三种型号:订单、订单项和产品,每个订单有许多订单项,每个订单项有一个产品,但一个产品可以订购多次 产品有一个供应商ID列(每个供应商有许多产品) 以下是关系: 型号:订单: public function items(){ return $this->hasMany('App\Models\OrderItem','id','order_id'); } 型号订单项 public function order(){ return $this->

我遇到了一个问题,我有三种型号:订单、订单项和产品,每个订单有许多订单项,每个订单项有一个产品,但一个产品可以订购多次

产品有一个供应商ID列(每个供应商有许多产品)

以下是关系:

型号:订单:

public function items(){
    
return $this->hasMany('App\Models\OrderItem','id','order_id');
}
型号订单项

  public function order(){

  return $this->belongsTo('App\Models\Order','order_id','id');
 }
  public function product(){
  
    return $this->belongsTo('App\Models\Product','item_id','id');
  }
型号产品

public function orders()
{
return $this->hasMany('App\Models\OrderItem','item_id','id');
}
我想要的是,给定一个供应商id,我需要过滤该供应商id的产品,并获取该供应商id的订单项,然后按创建日期对其进行分组,该日期仅在订单模型中可用,而不在订单项中可用

换句话说,我希望获得给定供应商的所有订单(通过“产品”中的“供应商id”列),按其创建日期分组,但订单与产品之间没有直接关系。我必须获得订单项才能获得产品(订单>订单项>产品)

我想做以下几件事:

Product::with("orders")->where("supplier_id","=",$supplier_id)->join("orders","orders.id","=","products.orders")
问题在于products.orders是一种关系(产品和订单项目之间),而不是一列。

使用以下代码段:

Product::select(DB::Raw('DATE(created_at) as cr'), ...)->where('supplier_id', $supplier_id)->with('orders.order')->groupBy('supplier_id')->get();
之后,您可以循环结果并按日期对其进行分组:

$result->groupBy('cr')
使用以下代码段:

Product::select(DB::Raw('DATE(created_at) as cr'), ...)->where('supplier_id', $supplier_id)->with('orders.order')->groupBy('supplier_id')->get();
之后,您可以循环结果并按日期对其进行分组:

$result->groupBy('cr')

您可以使用DB接口,或者如果您想继续使用模型,则需要使用多个Pull

您可以这样做:


Product::with(['orders','orders.order')->where('supplier_id',$supplier_id)->get()->pull('orders')->flatte()->pull('order')

您可以使用DB接口,或者如果您想继续使用模型,则需要使用多个Pull

您可以这样做:


Product::with(['orders','orders.order')->where('supplier_id',$supplier_id)->get()->pull('orders')->flatte()->pull('order')

您是否在“订单”表中有列product\u id?@OMR否我没有,因为一个订单有很多产品(比如当您一次在线购买多个产品时),但我在表order ITEM中有product\u id,您可以尝试使用。当我需要连接3个以上的表并且不需要中间表中的任何数据时,我通常会使用此选项。在“订单”表中是否有列product_id?@OMR否我没有,因为一个订单有许多产品(例如,当您一次在线购买多个产品时),但我在表order ITEM中有product_id,您可以尝试使用。当我需要连接3个以上的表,并且不需要中间表中的任何数据时,我通常使用这个方法