Ich fand ein sehr bizarres Verhalten von with
Funktion für die Überladung Beziehungen. Ich habe Product
und Deal
Beziehungen, so dass Product
belongsTo()
Deal
(über product_id
in deals
Tabelle). Jetzt, wenn ich versuche, alle zum Verkauf angebotenen Produkte zu erhalten:Einschränkung eifrig geladene Beziehung
Product::with(['deal' => function($query) {
$query->whereDate('ends_at', '>', Carbon::now()->toDateTimeString());
}])->get()
dies gibt eine Sammlung von alle Produkte, obwohl es keine Datensätze in deals
Tabelle und alle Produkte haben deal_id
Set NULL
. Zur gleichen Zeit gibt Product::has('deal')->get()
eine leere Sammlung zurück, wie Sie es erwarten würden.
entdecken ich zunächst dieses Problem bei dem Versuch, fünf zufällige Produkte auf dem Verkauf mit Deal
und Image
Beziehungen zusammen zu holen:
Product::with(['deal' => function ($query) {
$query->whereDate('ends_at', '>', // promo still active
Carbon::now()->toDateTimeString());
},
'images' => function ($query) {
$query->where('featured', true); // image featured on homepage
}])
->where('status', 'IN_STOCK') // 'In Stock'
->whereNull('deleted_at') // wasn't soft-deleted
->orderByRaw('RAND()')
->take(5)->get())
Diese aus allen Product
s eine Sammlung mit 5 zufälligen Product
s ergeben. Ich habe versucht mit query->whereNotNull('ends_at')->whereDate('ends_at' .....);
, aber die gleichen Ergebnisse.
Was mache ich hier falsch?
Oh, ich sehe, ich es rückwärts bekam. Danke für das Aufzeigen! – Alex