У меня есть две модели: Order
и Department
, соединенные отношениями «многие ко многим». В сводной таблице этого отношения содержится поле «статус». Поэтому конкретный заказ может выглядеть примерно так:Laravel 5.4: Продвинутый вопрос запроса сводной таблицы
- Производство: завершено
- Упаковка: (не требуется/не прилагается)
- Доставка: Идет
В интерфейсе для моего приложения I иметь вкладку для каждого отдела и флажки для статусов. Таким образом, 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();
}
Мои отношения определяли с помощью 'withPivot'. Я обновляю свой оригинальный пост с определением всех отношений – stevendesu