作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有三个表,一个是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 的记录。这意味着它仍在等待中。所以我只想得到那些仍在等待中的。未交付。这听起来有点复杂,希望我能正确解释我想做什么。
最佳答案
您的模型关系应更改为适当的多对多关系。架构看起来是正确的,因此我将进行以下更改:
// 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/
我是一名优秀的程序员,十分优秀!