我有三张table一张是 orders
一张table和另一张table order_status
一张table和另一张table status
table。目的 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意味着它是挂起的,然后后期得到了交付。或者你可以说得到了处理。其中as e02eaa4be只有一条状态1的记录。也就是说它还在等待。所以,我只想得到那些仍然悬而未决。没有交付。这听起来有点复杂,希望我能正确地解释我在做什么。
2条答案
按热度按时间2cmtqfgy1#
更新
尝试此操作以获取所有仍在等待的订单。。
如果有两个状态记录与一个订单相关,且其中一个状态值为1,则此查询将返回订单记录。您可以用您的确切条件更新它。(如果您确定只有两个状态与一个订单相关,而该订单仍处于挂起状态,那么您可以删除第二个状态。)
whereHas
.你可以用
many to many
关系就像@digitaldrifter建议的那样。我也建议你跟着many to many
关系。如果您正在使用
many to many
然后您可以尝试下面的查询。。或
hfyxw5xn2#
你的模型关系应该改成适当的多对多关系。架构看起来是正确的,因此我将进行以下更改:
这将正确地旋转
order_status
.要获取待定订单,查询将是:
或者,将范围添加到订单模型:
可用作:
Order::pending();