Ich habe Schwierigkeiten, einen wherePivot und/oder eine Priorität zu arbeiten.wherePivot Gruppenprioritäten (und/oder)
Lassen Sie mich mit Code erklären.
Ich habe 3 Tabellen:
Produkt
- id UNSIGNED INTEGER AUTO_INCREMENT
- Produkt VARCHAR (255)
Client
- id UNSIGNED INTEGER AUTO_INCREMENT
- Client VARCHAR (255)
client_product
- client_id UNSIGNED INTEGER
- UNSIGNED INTEGER product_id
- Preis DECIMAL (9,2) NULL
- valid_from (DATETIME-) NULL
- valid_until (DATETIME) NULL
Ich möchte den Preis für ein Produkt für einen Kunden für ein bestimmtes Datum finden.
Ich habe einen Umfang in Produktmodell:
public function clients()
{
return $this->belongsToMany('Client', 'client_product', 'product_id', 'client_id')
->withPivot('price', 'valid_from', 'valid_until');
}
Wenn das Produkt einen Preis hat, dann gilt:
- valid_from ein Datum gesetzt hat und nicht null sein kann.
- valid_until null sein kann oder ein Datum
gesetzt haben, um den Preis für ein Produkt zu erhalten, habe ich versucht, diese zwei Funktionen auf dem Modell Produkt aber keine funktioniert:
public function findPrice($clientId, $date)
{
return $this->clients()
->where('client_id', $clientId)
->where('valid_from', '<=', $date)
->where(function($query) use ($date) {
$query->wherePivot('valid_until', '>=', $date)
->orWherePivot('valid_until', '=', NULL);
})
->first();
}
ich diesen Fehler : auch
[Illuminate\Database\QueryException]
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pivot' in 'where clause'
, kann ich nicht verwenden
public function findPrice($clientId, $date)
{
return $this->clients()
->where('client_id', $clientId)
->where('valid_from', '<=', $date)
->wherePivot(function($query) use ($date) {
$query->where('valid_until', '>=', $date)
->orWhereNull('valid_until');
})
->first();
}
ich diesen Fehler:
[ErrorException]
Object of class Closure could not be converted to string
als Methode ‚wherePivot‘ dauert nur eine Zeichenfolge als erstes Argument und nicht um eine Schließung als ‚wo‘ Methode
BelongsToMany wherePivot(string $column, string $operator = null, mixed $value = null, string $boolean = 'and')
Super, es hat funktioniert. Danke @Sam –
markieren Sie die Antwort als richtig, wenn es funktioniert, so können andere Benutzer Bezug darauf bekommen .. :) –