gpt4 book ai didi

php - 如何从 laravel 中的关系表中过滤数据

转载 作者:行者123 更新时间:2023-11-29 05:55:19 24 4
gpt4 key购买 nike

我有三个表,一个是orders 表,另一个是order_status 表,另一个是status 表。 order_status 表的目的是保持跟踪订单的事件。我的表有以下列。

订单表

----------------------------
id | ref_num | name | email |
-----------------------------

订单状态表有

---------------------------
order_id | status_id
---------------------

我的模型是这样的订单模型

 public function orderStatus(){
return $this->hasMany(OrderStatus::class');
}

订单状态模型

  public function detail(){
return $this->belongsTo(Status::class,'status_id','id');
}

public function order(){
return $this->belongsTo(Order::class);
}

现在我想获得所有那些仍在等待处理的订单。我该怎么做?

我试过这样检索但是失败了

 $data['orders']= Order::with(['orderStatus' =>function($q){
$q->with('detail')->latest()->where('status_id',2);
}])->latest()->take(10)->get()->toArray();

这只返回一个,之后它不返回。

谁能告诉我如何对这个进行排序??谢谢

PS::一个订单可以有未付款、待处理、正在打包、运输中等多种状态,但顺序不同

我添加了订单状态表图片。如您所见,E7E7FF0EB7 订单号有两条记录 1,2 表示它处于待处理状态,然后后期已交付。或者您可以说已处理。其中 E02EAEA4BE 只有一个状态为 1 的记录。这意味着它仍在等待中。所以我只想得到那些仍在等待中的。未交付。这听起来有点复杂,希望我能正确解释我想做什么。 enter image description here

最佳答案

您的模型关系应更改为适当的多对多关系。架构看起来是正确的,因此我将进行以下更改:

// Order model
public function statuses(){
return $this->belongsToMany(Status::class);
}

// Status model
public function orders(){
return $this->belongsToMany(Order::class);
}

这将在 order_status 上正确旋转。

要获取挂单,查询将是:

Order::whereHas('statuses', function ($query) {
// assuming a 'name' column on statuses table
$query->where('name', 'pending');
// or using dynamic where
// $query->whereName('pending');
})->get();

或者,向 Order 模型添加一个范围:

public function scopePending($query) {
return $query->with(['statuses' => function ($query) {
$query->where('name', 'pending');
});
});

可用作:Order::pending();

关于php - 如何从 laravel 中的关系表中过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49995448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com