【问题标题】:Laravel - How can i get client's orders grouped by their statusLaravel - 我如何获取按状态分组的客户订单
【发布时间】:2018-09-07 23:23:31
【问题描述】:

我有一个无法解决的情况,我有 3 个表/模型,其结构如下:

  • 客户端型号:Client->hasMany(Order::Class)
  • 订购型号:Order->belongsTo(Client::Class)Order->belongsTo(Status::Class)
  • 状态模型:Status->hasMany(Order::class)

我希望能够将每个客户的订单按其状态分组,例如:3 个已取消 - 4 个已完成 - 5 个处理中

我试过了,但没有用:(

Client Model {


    public function {

        return $this->orders()->selectRaw('status_id, count(id) as total')->groupBy('status_id);

        // orders() = is the relation a client hasmany orders
    }

}

谁能帮忙谢谢

【问题讨论】:

  • “没用”是什么意思?
  • 这意味着它没有像我预期的那样工作我仍然必须找到一个客户并使用这种方法来获取他的订单按状态分组,我知道我仍然缺少一些东西也有一个限制因为并非所有客户都有订单,所以我需要实现某种 $clients = Client::has('orders') 并返回一个空的项目数组
  • 请添加一些示例数据和预期结果。
  • 我有以下详细模型:class Client extends Model { public function orders() { return $this->hasMany(Order::class); } } 类订单扩展模型 { public function client() { return $this->belongsTo(Client::class); } } 类状态扩展模型 { public function orders() { return $this->hasMany(Order::class); } }
  • 我有以下详细模型:class Client extends Model { public function orders() { return $this->hasMany(Order::class); } } 类订单扩展模型 { public function client() { return $this->belongsTo(Client::class); } } 类状态扩展模型 { public function orders() { return $this->hasMany(Order::class); } } 例如,我想在视图上有一个列表,例如:订单:3 已完成 - 2 正在处理 - 2 已取消

标签: laravel eloquent


【解决方案1】:

以这种方式定义您在客户端模型中的关系

public function orders()
{
    return $this->hasMany(Order::class);
}

public function getOrdersCompletedAttribute()
{
    return $this->orders->where('id_status', 5)->count();
}

public function getOrdersProcessingAttribute()
{
    return $this->orders->where('id_status', 1)->count();
}

假设状态 1 = '处理' 和 5 = '完成'

你可以像这样访问 de 属性:

$client->orders_completed

获得4个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多