2014-10-18 3 views
0

다음 코드를 실행하면 Containable 동작이 작동하지 않습니다. 수동 조인을 사용하고 싶지 않습니다!Cakephp contains가 쿼리에 포함되었습니다.

$data = $this->Variant->find('first', array(
     'contain' => array('VariantValue'), 
     'conditions' => array(
      'Variant.product_id' => $product_id 
     ), 
     'group' => 'VariantValue.variant_id having count(*) = 2' 
)); 

데이터베이스 :

CREATE TABLE `variants` (
    `id` int(11) NOT NULL, 
    `product_id` int(11) NOT NULL, 
    `price` decimal(7,2) NOT NULL 
)  

CREATE TABLE `variant_values` (
    `id` int(11) NOT NULL, 
    `variant_id` int(11) NOT NULL, 
    `value_id` int(11) NOT NULL 
) 

모델 :

class Variant extends AppModel { 

    public $actsAs = array('Containable'); 
    public $belongsTo = array(
     'Product' => array(
      'className' => 'Product', 
      'foreignKey' => 'product_id' 
     ) 
    ); 
    public $hasMany = array('CartVariant', 'VariantValue'); 
} 

class VariantValue extends AppModel { 

    public $actsAs = array('Containable'); 
    public $belongsTo = array(
     'Value' => array(
      'className' => 'Value', 
      'foreignKey' => 'value_id' 
     ), 
     'Variant' => array(
      'className' => 'Variant', 
      'foreignKey' => 'variant_id' 
     ) 
    ); 
} 

오류 메시지 :

오류 : SQLSTATE [42S22] : 열이 발견되지 : 그룹 문

SQL 쿼리에서 1054 알 수없는 열 VariantValue.variant_id : 변형 AS 변형 FROM SELECT Variant.id, Variant.product_id, Variant.price WHERE Variant.product_id = COUNT (*) = 2

+0

테이블 구조를 공유하시기 바랍니다. –

+0

[Plugin의 두 모델 (CakePHP)에 대한 질의 오류] (http://stackoverflow.com/questions/23741801/error-with-a-query-across-two-models-of-a-plugin) -cakephp) – ndm

+0

중복이 될 수 있지만 프레임 워크에 Containable과 같은 것이 있으면 수동 결합을 사용하고 싶지 않습니다. –

답변

1

을 가진 VariantValue.variant_id 1 개 그룹 VariantValue 관점에서 코드를 작성하십시오 :

$data = $this->Variant->VariantValue->find('first', array(
     'contain' => array(
       'Variant' => array(
        'conditions' => array('Variant.product_id' => $product_id))), 
     'group' => 'VariantValue.variant_id HAVING count(*) = 2' 
));