首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cakephp使用contain条件查找

cakephp使用contain条件查找
EN

Stack Overflow用户
提问于 2013-12-05 00:42:45
回答 2查看 2K关注 0票数 0

以下是以下情况:

购物车belongsTo产品。一个产品belongsTo一个类别。

这是我的问题:

代码语言:javascript
复制
$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;

查询无效!!看看这个:

代码语言:javascript
复制
 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%')) 

正如您所看到的,类别数据并未附加到产品!!如果我用一个简单的条件尝试相同的查询(例如,‘query’=> "%$query%")查询正常!!所以我认为问题出在OR条件下,但我无法解决它...

有什么建议吗?

提前进行Thx

EN

回答 2

Stack Overflow用户

发布于 2013-12-05 02:28:17

由于您正在尝试在不同表上的术语之间执行OR操作,因此我相信您必须丢弃此查询的关系,并进行手动连接。使用手动连接,我认为您应该能够随心所欲地编写条件。也许是这样的?

代码语言:javascript
复制
 $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'));
票数 1
EN

Stack Overflow用户

发布于 2013-12-05 00:53:21

您正在应用的条件(Category.name)在主模型关联(购物车和产品)中不存在。我不确定您的需求,但一个很好的起点是将查询更改为如下所示:

代码语言:javascript
复制
 $results = $this->Cart->find('all', 
        array(
          'contain' => array(
              'Product' => array(
                  'Category' => array(
                      'conditions' => array('Category.name LIKE' => "%$query%"),
                      'fields' => array('Category.name')
                   )
              )
           ),
          'conditions'=>array(
              'Product.title LIKE' => "%$query%"
          ),                                                  
         'fields'=> array('Product.title')
        );

请记住,这不是解决方案,您必须根据您的要求修改条件(如您所见,我删除了OR条件)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20381024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档