使用CakePHP 2.x
和MySQL 5.6.40
,我将创建以下分页:
$options = array(
'contain' => array(
'Category',
'ProductImage'
),
'limit' => 10,
'order' => array(
'Product.year' => 'DESC',
'Product.month' => 'DESC'
)
);
但是我忘记了我的products.month列是varchar,所以我必须进行一次转换,将products.month转换为integer:
$options = array(
'contain' => array(
'Category',
'ProductImage'
),
'limit' => 10,
'order' => array(
'Product.year' => 'DESC',
'CAST(Product.month as INT)' => 'DESC'
)
);
但在查询输出中,它会将Order By CAST作为INT删除
SELECT
...
FROM
`web_quality`.`products` AS `Product`
LEFT JOIN `web_quality`.`categories` AS `Category` ON (
`Product`.`category_id` = `Category`.`id`
)
WHERE
`Product`.`category_id` IN (
SELECT
id
FROM
categories
WHERE
tag = 'revistas'
AND company_id IN (
SELECT
id
FROM
companies
WHERE
tag = 'dr'
)
)
AND NOT (
(
(`Product`.`year` = '2022')
AND (`Product`.`month` = '2')
)
)
AND `Product`.`enabled` = '1'
ORDER BY
`Product`.`year` DESC,
LIMIT 10
它也不会产生任何类型的错误,如果我尝试手动查询与CAST作为INT它的工作,但我必须这样做使用CakePHP模型,什么可能是错误的?
非常感谢!
1条答案
按热度按时间ekqde3dh1#
在我的记忆中,您应该使用虚拟字段,因为分页器会检查给定字段是否存在于模型中,而将SQL片段列入白名单似乎不是一个好主意。
在你的模型中,你可以这样做:
然后按
Product.month_number
订购。另请参阅
*Cookbook〉核心库〉组件〉分页〉控制用于排序的字段