我开发了一个工具,你可以根据表单中的输入从大表中获取10条记录。例如,如果表格中有一个带有记录"数字"的列,您可以输入一个数字,然后应用程序会将10个以下记录返回到该记录中。 / p>
这样做的目的是始终获得最后一次获取中最新的10个输入。
问题在于,AFAIK,在特定位置开始搜索的条件无法进行查找。
查找邻居非常接近,但遗憾的是它只返回两个结果:搜索的前一个和下一个结果。
有什么想法吗?
编辑:现在查询如下所示:
$data = $this->Tweet->find('all', array(
'field' => array('Tweet.permalink' => $param2),
'fields' => array('Tweet.embed'),
'limit' => 10,
'order' => array('Tweet.created' => 'desc'),
'contain' => false,
// 'offset' => 1,
'conditions' => array('not' => array('Tweet.embed' => null),
'Tweet.status' => 'approved',
),
));
不按照我想要的方式工作。此外,如果我不评论第一行("字段"),它只返回一个结果。 BTW,$ param2是用户的输入
修改编辑: 脏解决方案 。
我使用Nunser方法。我没有完全理解findNeighbors函数,但经过一些调试后,函数最终结果如下:
protected function _findNeighbors($state, $query, $results = array()) {
extract($query);
if ($state === 'before') {
$conditions = (array)$conditions;
if (isset($field) && isset($value)) {
if (strpos($field, '.') === false) {
$field = $this->alias . '.' . $field;
}
} else {
$field = $this->alias . '.' . $this->primaryKey;
$value = $this->id;
}
$query['conditions'] = array_merge($conditions, array($field . ' <' => $value));
$query['order'] = $field . ' DESC';
$query['limit'] = 10;
$query['field'] = $field;
$query['value'] = $value;
return $query;
}
return $results;
}
查看$ query [&#39; limit&#39;] = 10;领域?最初它只限于一个结果,所以我添加了一个0并切断了以下代码,它构建了prev和next数组。我不知道它是如何获得10个结果的,SQL查询是如何构建的,但是它有效!
它有一个错误:如果您进行查询并且在搜索的项目之前没有10个结果,则会返回随机结果。
答案 0 :(得分:3)
一定是因为已经很晚了,但我并没有真正理解你想要做什么。
但无论如何,既然你说find('neighbors')
已经非常接近,那么我会给你一个自定义更改的选项,以满足你的需求。话虽这么说,如果其他人的睡眠不如我,并为你提供更有效的解决方案,那就接受吧。
无论如何,解决方案:构建自定义查找
Cake的文档解释了how to create one。这样做,find('lots-of-neighbors')
找到。
创建一个新的自定义查找似乎非常简单,所以不解释,如果你不了解那里的话,你应该问一个新的问题。
现在,实际放入自定义查找功能的内容是什么?好吧,复制find('neighbors')
功能并更改您需要的功能。我会给你link for the code,虽然我没有你的确切cakephp版本,所以你应该仔细检查。
根据我的理解,你对该功能的唯一问题是它只返回2条记录,因此你可能只需要改变条件内的limits
(第3143,3156,3160行)。
简而言之。如果它不是你想要的,我明天早上再给它一次。
答案 1 :(得分:2)
它不是一种方便的方法,但可能适合你 -
$find_id = $this->Tweet->find('first', array(
'conditions' => array(
'Tweet.permalink' => $param2
)
)
);
现在我有了该记录的ID ...因此id是auto_increment,现在我可以使用>=
或<=
$tweets = $this->Tweet->find('all', array(
'conditions' => array(
'Tweet.id >=' =>$find_id['Tweet']['id']
),
'limit' => 10
)
);