加入不在 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(.....);
试试这个
$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);
我在 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(.....);
试试这个
$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);