加入不在 CakePHP 3 中工作

join not working in CakePHP 3

我在 controller 中使用此代码来获取联接结果,而不是在 CakePHP 3.2

中包含关联
$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 给出的多级数组很难从多级数组中获取关联数据的集合。

Edit 2 : Result of debug($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)

我想你可能对所有领域都这样写:

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

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

See Cakephp 3 join

试试这个

 $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);