0

これは状況です:

カートは商品に属します。製品はカテゴリに属します。

これは私のクエリです:

$results = $this->Cart->find('all', 
        array(
          'contain' => array(
                'Product' => array('Category')
                 ),
          'conditions'=>array(
                               'OR' => array(
                                    'Product.title LIKE' => "%$query%", 
                                    'Category.name LIKE' => "%$query%"
                                     )
                             ),                                                  
          'fields'=>array('Product.title', 'Category.name'))

debug($results); exit;

クエリは機能しません!! これを見てください:

 Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Category.name' in 'field list'

SQL Query: SELECT `Product`.`title`, `Category`.`name`, `Product`.`id` FROM `my_db`.`carts` AS `Cart` LEFT JOIN `my_db`.`products` AS `Product` ON (`Cart`.`product_id` = `Product`.`id`) WHERE ((`Product`.`title` LIKE '%apple%') OR (`Category`.`name` LIKE '%apple%')) 

ご覧のとおり、カテゴリ データは製品に添付されていません !! 単純な条件 (例: 'Category.name LIKE' => "%$query%") で同じクエリを試すと、クエリは機能します!! 問題はOR条件にあると思いますが、解決できません...

提案がありますか?

事前にThx

4

2 に答える 2

1

異なるテーブルの用語間で OR を実行しようとしているので、このクエリの関係を破棄し、代わりに手動で結合する必要があると思います。手動ジョインなら条件も自由に書けると思います。おそらくこのようなものですか?

 $this->Cart->recursive = -1;
 $results = $this->Cart->find('all', 
    array(
      'joins' => array(
            array(
                'table' => 'products',
                'alias' => 'Product',
                'conditions' => array(
                    'Product.cart_id = Cart.id',
                ),
            ),
      ),
      'conditions'=>array(
                           'OR' => array(
                                'Product.title LIKE' => "%$query%", 
                                'Category.name LIKE' => "%$query%"
                                 )
                         ),                                                  
      'fields'=>array('Product.title', 'Category.name'));
于 2013-12-04T18:28:16.580 に答える