Ich habe einen Online-Shop mit dynamischen Feldern (Spezifikationen) und Filtern. Alle Angaben sind in der Tabelle gespeichert sind z.BYii2 dynamisch hinzufügen joinWith
product_specifications:
-id
-product_id
-spec_id
-spec_val_id
Filter sind mit Daten verbunden sind, so dass, wenn i Filterwert senden i Spezifikationswerte. Zum Beispiel
Wenn ich Schleifenfilter bin, möchte ich linken Verknüpfungen zur Produktabfrage hinzufügen. So etwas wie dieses
$joinString = "";
foreach($filters){
$joinString .= "LEFT JOIN product_specifications AS prod_'.filter.' ON .....";
}
Ich habe Abfrage so ActiveDataProvider:
$prodQuery = Product::find()->joinWith('translation')->joinWith('cats')->[HERE FILTERS JOINS]->where($whereString)->groupBy(['id']);
Aber wenn ich 5 Filter haben, ich brauche 5 schließt sich an Tisch product_specifications. Kann ich in joinWith ein Array mit allen Joins hinzufügen oder 5 Joins zur Abfragekette hinzufügen? Zu einer Kategorie meine Filter sind auch dynamisch, so dass die Seite 5 oder 10 Filter haben kann, kann ich keine statische Anzahl von joinWith ('specs') hinzufügen.
Vielen Dank im Voraus.
Ich bin auch mit anderen Entscheidungen einverstanden.
EDIT:
ich Abfrage mit findBySql wie diese
ändern$prodQuery = Product::findBySql('
SELECT `product`.*
FROM `product`
LEFT JOIN `productLang` ON `product`.`id` = `productLang`.`product_id`
LEFT JOIN `product_cat` ON `product`.`id` = `product_cat`.`product_id`
LEFT JOIN `page` ON `product_cat`.`page_id` = `page`.`id`
LEFT JOIN `page` `parent` ON `page`.`id_in` = `parent`.`id`'
.$joinString.
' WHERE ('
.$whereString.
' AND (`language`=\''.$lang->url.'\')) GROUP BY `product`.`id` ');
Und mein Dataprovider:
$dataProvider = new ActiveDataProvider([
'query' => $prodQuery,
'pagination' => [
'totalCount' => count($prodQuery->all()),
'pageSize' => $pageSize,
'route' => Yii::$app->getRequest()->getQueryParam('first_step'),
],
'sort' => [
'defaultOrder' => $orderArr,
],
]);
Nun mein Problem Paginierung ist und Sortierung. In meiner Testseite habe ich 4 Produkte, wenn ich $ pageSize = 1 setze, habe ich 4 Seiten in Paginierung, aber auf jeder Seite habe ich alle 4 Produkte.
Wo ist mein Fehler?
Mein Problem ist nicht, wo Zustand. Es ist in meinem var $ whereString. Wenn ich Schleifenfilter, wo Bedingung für Filter in $ whereString verkettet ist, aber ich kann nicht alle Verknüpfungen verketten. Zum Beispiel habe ich 2 Filter, ich brauche 2 Links Joins z. B. LINKEN JOIN product_spec als prod_spec_1 ON .... LINKS JOIN product_spec als prod_spec_2, so in meinem wo Zustand habe ich prod_spec_1.spec_id = filterValue1 UND prod_spec_2.spec_id = filterValue2 – pLe0mAx