2016-08-03 23 views
0

I 3 Tabellen, categories, products und seller_products und ihre Verbände sind wie CategoriesTable.phpCakePHP 3: Multi-Level-Verein

$this->hasMany('Products', [ 
    'foreignKey' => 'category_id' 
]); 

ProductsTable.php

$this->hasMany('SellerProducts', [ 
    'foreignKey' => 'product_id' 
]); 

$this->belongsTo('Categories', [ 
    'foreignKey' => 'category_id', 
    'joinType' => 'INNER' 
]); 

VerkäuferProdukteTabelle.php

Jetzt
$this->belongsTo('Products', [ 
    'foreignKey' => 'product_id', 
    'joinType' => 'INNER' 
]); 

, Im view von categories (site.com/categories/view/2), muss ich alle Produkte Daten wählen Sie aus products und sellerProducts wo Produkte zur Kategorie-ID gehört, und gibt es auch in sellerProducts. dh.,

products.category_id = $id AND sellerProducts.product_id = Products.id 

Gibt es eine einfache Möglichkeit, in CakePHP 3 das Ergebnis zu erhalten?

bearbeiten 2

Das ist, was ich versuche. In view() Wirkung von CategoriesController.php

$this->loadModel('Products'); 
     $sellerProducts = $this->Products->find('all', [ 
      'conditions' => [ 
      'category_id' => $id 
      ], 
      'joins' => [ 
       'table' => 'SellerProducts', 
       'alias' => 'SellerProducts', 
       'type' => 'INNER', 
       'conditions' => [ 
       'SellerProducts.product_id' => 'Products.id', 
       'stock >' => 0 
       ] 
      ] 
     ]); 
     debug($sellerProducts); 
     foreach($sellerProducts as $a) { 
      debug($a); 
     } 

auf debug gibt es nur die Daten aus Products Tabelle aber nicht von SellerProducts

+0

Scheint eine sehr einfache Aufgabe, was hast du bisher versucht? – arilia

+0

@arilia siehe 'edit 2' –

Antwort

2

statt Sie einfach SellerProducts enthalten join können

$this->Products->find() 
    ->where(['category_id' => $id]) 
    ->contain(['SellerProducts' => function($q) { 
     return $q->where(['stock >' => 0]) 
    }]); 

wenn Sie abfragen möchten die Daten von sellerproducts, die Sie tun können

$this->Products->SellerProducts->find() 
    ->where([ 
     'Products.category_id' => $id 
     'SellerProducts.stock >' => 0]) 
    ->contain(['Products', 'Products.Categories']); 
+0

dies ergibt das Ergebnis in' 2D' Array, in dem das erste Array 'products' enthält und das zweite Array alle' sellerProducts' enthält, die mit diesem Produkt assoziiert sind. Ich möchte alle Daten in einem einzigen Array, weil ich viele andere Funktionen später auf die Daten ausführen muss, finden Sie 'min ('selling_price')' und 'max ('selling_price')', die in 'sellerProducts' sind. und auch, um nur einen Verkäufer mit jedem Produkt mit minimalem 'selling_price' usw. zu bekommen. Ich denke, es wird leicht sein, diese Funktionen später am Ergebnis des Beitritts auszuführen. –

+0

Ich habe eine alternative Lösung hinzugefügt, siehe meine Bearbeitung – arilia