这是情况:
购物车属于产品。产品属于类别。
这是我的疑问:
$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条件,但我无法解决它......
有建议吗?
提前谢谢
答案 0 :(得分: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'));
答案 1 :(得分:0)
您正在应用主模型关联(购物车和产品)中不存在的条件(Category.name)。我不确定您的要求,但一个好的起点是将查询更改为:
$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条件)