繁体   English   中英

Laravel 5.4:高级数据透视表查询问题

[英]Laravel 5.4: Advanced pivot table query issue

我有两个模型: OrderDepartment ,由多对多关系加入。 此关系上的数据透视表包含“状态”字段。 所以特定的顺序可能类似于:

  • 制造业:完成
  • 包装:(不需要/不附加)
  • 运输:正在进行中

在我的应用程序的UI中,我有每个部门的选项卡和状态的复选框。 因此,API需要能够接收具有一个部门和多个可能状态的请求,并返回与给定部门的所选状态之一匹配的所有订单。

示例查询: /api/orders?dep=manufacturing&statuses=notStarted,inProgress

这需要(无论状态如何在其他任何部门)返回其或者 “进行中”,“未启动”或所有订单的制造部门

这是我写的查询:

$query = Order::with("departments");
$department = Request::get('department');
$statuses = explode(",", Request::get('statuses', ""));

if (!empty($department))
{
    $query->whereHas('departments', function ($q) use ($department)
    {
        $q->where('name', $department);
    });
    if (count($statuses) > 0)
    {
        $query->where(function ($q) use ($department, $statuses)
        {
            foreach ($statuses as $status)
            {
                $q->orWhereHas('departments', function ($q) use ($department, $status)
                {
                    $q->where('name', $department)->wherePivot('status', $status);
                }
            }
        });
    }
}

return $query->paginate(15);

这是抛出错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pivot' in 'where clause'

我的关系定义如下:

public function departments()
{
    return $this->belongsToMany('App\Models\Department', 'order_statuses')->using('App\Models\OrderStatus')->withPivot('status')->withTimestamps();
}

默认情况下,只有模型键才会出现在数据透视表对象上。 如果数据透视表包含额外属性,则必须在定义关系时指定它们:

return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');

我最终想出了以下解决方案:

if (!empty($departments)
{
    if (count($statuses) > 0)
    {
        $query->whereHas('departments', function ($q) use ($department, $statuses)
        {
            $q->where('name', $department)->whereIn('order_statuses.status', $statuses);
        }
    } else {
        $query->whereHas('departments', function ($q) use ($department)
        {
            $q->where('name', $department);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM