2011-07-18 6 views
-1

私のデータベースには、「products」は「company」に属し、「company」には多くの「company_addresses」があります。そして私はコントローラにユーザーの入力した会社の住所に基づいて製品を返す検索アクションを構築しています。フォローインのようなものを手に入れるにはどうすればいいですか?CakePHP 3レベル参加方法を見つける

SELECT * 
FROM products 
LEFT JOIN companies ON products.company_id = companies.id 
LEFT JOIN company_addresses ON companies.id = company_addresses.company_id 
WHERE company_addresses.address1 LIKE '%'.$this->data['Product']['keyword'].'%' 
OR company_addresses.address2 LIKE '%'.$this->data['Product']['keyword'].'%' 

これは動作していないよう:

$results = $this->Product->find('all', array(
    'conditions' => array(
     'OR' => array(
      array('CompanyAddress.address1 LIKE' => '%'.$this->data['Product']['keyword'].'%'), 
      array('CompanyAddress.address2 LIKE' => '%'.$this->data['Product']['keyword'].'%') 
     ) 
    ), 
    'order' => array(
     'Product.id' => 'ASC' 
    ), 
    'contain' => array(
     'Company' => array(
      'CompanyAddress' => array(
       'State', 
       'City' 
      ) 
     ) 
    ) 
)); 

もこの:

$results = $this->Product->find('all', array(
    'order' => array(
     'Product.id' => 'ASC' 
    ), 
    'contain' => array(
     'Company' => array(
      'CompanyAddress' => array(
       'conditions' => array(
        'OR' => array(
         array('CompanyAddress.address1 LIKE' => '%'.$this->data['Product']['keyword'].'%'), 
         array('CompanyAddress.address2 LIKE' => '%'.$this->data['Product']['keyword'].'%') 
        ) 
       ), 
       'State', 
       'City' 
      ) 
     ) 
    ) 
)); 

答えて

0

私はあなたのための最良のは、CakePHPの結合を使用することだと思います。

このような何か:

$this->Product->find('all', array(
          'joins' => array(
           array(
            'table' => 'companies', 
            'alias' => 'Company', 
            'type' => 'left', 
            'conditions' => array(
             'Company.id = Product.company_id' 
            ), 
           ), 
           array(
            'table' => 'companies_addresses', 
            'alias' => 'CompaniesAddress', 
            'type' => 'left', 
            'conditions' => array(
             'CompaniesAdress.company_id = Company.id', 
             'OR' => array(
              'CompanyAdress.address1 LIKE' => '%' . $this->data['Product']['keyword'] . '%', 
              'CompanyAdress.address2 LIKE' => '%' . $this->data['Product']['keyword'] . '%', 
             ), 
            ), 
           ), 
          ), 
         )); 
関連する問題