2016-08-04 3 views
0

Я использую этот код в controller, чтобы получить результат вступил вместо содержать связанные с CakePHP 3,2присоединиться не работает в CakePHP 3

$abc = $this->Products->SellerProducts->find('all', [ 
      'conditions' => [ 
      'Products.subcategory_id' => $id, 
      'SellerProducts.stock >' => 0, 
      ], 
      'join' => [ 
      'products' => [ 
       'table' => 'Products', 
       'type' => 'INNER', 
       'conditions' => [ 
       'products.id = SellerProducts.product_id' 
       ] 
      ], 
      'brands' => [ 
       'table' => 'Brands', 
       'type' => 'INNER', 
       'conditions' => 'brands.id = products.brand_id' 
      ], 
      'product_colors' => [ 
       'table' => 'ProductColors', 
       'type' => 'INNER', 
       'conditions' => 'product_colors.product_id = products.id' 
      ], 
      'colors' => [ 
       'table' => 'Colors', 
       'type' => 'INNER', 
       'conditions' => 'colors.id = product_colors.color_id' 
      ] 
      ] 
     ]); 

Но на debug, это дает только данные SellerProducts и не включает (присоединение) другие таблицы.

Я хочу получить связанный результат и не связанный результат с использованием метода contain, потому что contain дает многоуровневый массив, который трудно получить для сбора связанных данных из многоуровневого массива.

Редактировать 2: Результат отладки ($ abc);

SELECT SellerProducts.id AS `SellerProducts__id`, SellerProducts.seller_id AS `SellerProducts__seller_id`, SellerProducts.product_id AS `SellerProducts__product_id`, SellerProducts.selling_price AS `SellerProducts__selling_price` FROM seller_products SellerProducts INNER JOIN Products products ON products.id = SellerProducts.product_id INNER JOIN Brands brands ON brands.id = products.brand_id INNER JOIN ProductColors product_colors ON product_colors.product_id = products.id INNER JOIN Colors colors ON colors.id = product_colors.color_id WHERE (Products.subcategory_id = :c0 AND SellerProducts.stock > :c1) 
+0

В отладочном запросе отображается запрос 'join', который вы применили? – Riad

+0

См. Edit 2, он присоединяется, но при выборе только столбцов sellProducts –

+0

укажите поля для извлечения других столбцов. 'SellerProducts-> find ('all', array ('fields' => array() ...)' – Riad

ответ

0

Я думаю, вы можете написать, как это для всех полей:

$this->SellerProducts->find('all',['fields' => [], 'conditions' => []] 

ИЛИ

$this->SellerProducts->find('all', [ 
     'conditions' => [ 
     'Products.subcategory_id' => $id, 
     'SellerProducts.stock >' => 0, 
     ]])->join(.....); 

See Cakephp 3 join

0

Попробуйте

$SellerProducts = TableRegistry::get('SellerProducts'); 
$resultSet = $SellerProducts->find('all')->hydrate(false) 
        ->select(['SellerProducts.id'])       
        ->join([ 
         'Products'=> [ 
          'table'  => 'products', 
          'type'  => 'INNER', 
          'conditions' => 'Products.id = SellerProducts.product_id', 
         ], 
         'Brands'=> [ 
          'table'  => 'brands', 
          'type'  => 'INNER', 
          'conditions' => 'Brands.id = Products.brand_id', 
         ], 
         'ProductColors'=> [ 
          'table'  => 'product_colors', 
          'type'  => 'INNER', 
          'conditions' => 'ProductColors.product_id = Products.id', 
         ], 
         'Colors'=> [ 
          'table'  => 'colors', 
          'type'  => 'INNER', 
          'conditions' => 'Colors.id = ProductColors.color_id', 
         ] 
        ]) 
        ->where([ 
         'Products.subcategory_id' => $id, 
         'SellerProducts.stock >' => 0 
        ]) 
        ->toArray(); 
    print_r($resultSet);