Ich habe zwei Modelle: Order
und Department
, durch eine Viele-zu-viele-Beziehung verbunden. Die Pivot-Tabelle dieser Beziehung enthält ein "Status" -Feld. So eine bestimmte Reihenfolge etwas aussehen kann:Laravel 5.4: Erweiterte Pivot-Tabelle Abfrage Ausgabe
- Herstellung: abgeschlossen
- Verpackung: (nicht erforderlich/nicht angeschlossen)
- Versand: im Gang
In der Benutzeroberfläche für meine app I eine Registerkarte für jede Abteilung und Kontrollkästchen für Status haben. Daher muss die API in der Lage sein, eine Anfrage mit einer Abteilung und mehreren möglichen Status zu beantworten und alle Bestellungen zurückzugeben, die mit einem der ausgewählten Status für die betreffende Abteilung übereinstimmen.
Beispiel query: /api/orders?dep=manufacturing&statuses=notStarted,inProgress
Diese alle Aufträge zurückgeben muss, die entweder "nicht gestartet" oder "in progress" für die Fertigung (unabhängig von ihrem Status in jeder anderen Abteilung) sind
Hier ist die Abfrage, die ich schrieb:
$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);
Dies wirft den Fehler:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pivot' in 'where clause'
Meine Beziehung ist wie folgt definiert:
public function departments()
{
return $this->belongsToMany('App\Models\Department', 'order_statuses')->using('App\Models\OrderStatus')->withPivot('status')->withTimestamps();
}
Meine Beziehung definiert wurde mit 'withPivot'. Ich werde meinen ursprünglichen Post mit der gesamten Beziehungsdefinition aktualisieren – stevendesu