gpt4 book ai didi

mysql - 在 CakePHP 中使用 FIELD 排序

转载 作者:可可西里 更新时间:2023-11-01 08:52:13 25 4
gpt4 key购买 nike

我正在尝试使用以下代码将自定义排序顺序实现到 CakePHP 2 应用程序中:

var $paginate = array(
'Project' => array(
'conditions' => array('Project.deleted' => 0),
'order' => array(
'Project.pinned' => 'desc',
'FIELD(Project.status, 1, 3, 4, 0, 2) DESC'
'Project.date_start' => 'asc',
'Project.name' => 'asc',
),
),
);

但是,由于某些原因 FIELD(Project.status, 1, 3, 4, 0, 2) DESC 被 Cake 忽略了。你能帮我让它工作吗?

最佳答案

我通过更改/lib/Cake/Controller/Component/PaginatorComponent.php 使其工作

我刚刚找到了如何执行此操作,并且我知道它并不完美,因为它无法验证语句是否正确,但我认为这对于遇到此问题的人来说是一个好的开始。

在函数 validateSort 中,我添加了最后一个 elseif,以防它是一个 ORDER BY FIELD。问题是 $order[$alias.'.'.$field] = $value 不能与 FIELD 一起使用,因为它的工作方式与大多数其他 ORDER BY 子句不同。

foreach ($options['order'] as $key => $value) {
$field = $key;
$alias = $object->alias;
if (strpos($key, '.') !== false) {
list($alias, $field) = explode('.', $key);
}

if ($object->hasField($field)) {
$order[$alias . '.' . $field] = $value;

} elseif ($object->hasField($key, true)) {
$order[$field] = $value;
} elseif (isset($object->{$alias}) && $object->{$alias}->hasField($field, true)) {
$order[$alias . '.' . $field] = $value;
} elseif (strpos($alias, 'FIELD')==0){
$order[$key]=$value;
}

}

关于mysql - 在 CakePHP 中使用 FIELD 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11757056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com