Ich habe eine Produktklasse mit zwei Kategorie IDs angegeben. Ich habe die folgenden Beziehungen eingerichtet und jetzt möchte ich die products
Ergebnismenge paginieren.Verschmelzbare Querybuilder in Laravel 5.2 zusammenfügen dann paginieren
public function productsWithFirstCategory()
{
return $this->hasMany('App\Entities\Product', 'category1_id');
}
public function productsWithSecondCategory()
{
return $this->hasMany('App\Entities\Product', 'category2_id');
}
public function products()
{
return $this->productsWithFirstCategory->merge($this->productsWithSecondCategory);
}
public function getProductsPaginatedAttribute()
{
return $this->products()->paginate(20);
}
Es scheint, ich nicht die Ergebnisse Paginieren kann, weil die Zusammenführung keine Query Builder zurückgibt - wie Paginieren ich eine fusionierte Ergebnismenge?
Obwohl '$ item-> products' die Produkte erfolgreich auflistet, bekomme ich die Fehlermeldung 'SQLSTATE [HY000]: Allgemeiner Fehler: 1 SELECTs links und rechts von UNION haben nicht die gleiche Anzahl von Ergebnisspalten (SQL: Wählen Sie Anzahl (*) als Aggregat von "products" wo "products". "category1_id" = 1 und "products". "category1_id" ist nicht null union select * von "products" wo "products "." category2_id "= 1 und" products "." category2_id "ist nicht null).' – user3791372
Weitere reserach zeigt, dass die raw sql funktioniert, wenn keine Zählung abgerufen wird, obwohl – user3791372
Es scheint, dass Eloquent Union Anfragen nicht korrekt behandelt, wenn es darum geht Zählen der Results - die Abfrage, die generiert wird, ist zumindest für MySQL nicht korrekt. Sie können den Paginator selbst erstellen, aber Sie müssen jedes Mal, wenn Sie eine einfache Seite abrufen müssen, alle Ergebnisseiten abrufen. Es könnte funktionieren, wenn Sie nicht zu viele Seiten haben - ist das ok für Sie? –