我正在将这个查询与Cakephp 3用于一个小搜索引擎
$query_tweet = $this->Tweet
->find()
->select([
'Users.username',
'Users.avatarprofil',
'Tweet.contenu_tweet',
'Tweet.created',
'Tweet.nb_commentaire',
'Tweet.nb_partage',
'Tweet.nb_like',
])
->where([
"MATCH(Tweet.contenu_tweet) AGAINST(:search)"
])
->where(['private' => 0]) // on ne cherche que les tweets publics
->bind(':search', '$search')
->order(['Tweet.created' => 'DESC'])
->contain(['Users']);
此查询完美无缺,但我想使用像这样的分页器
$this->set('resultat_tweet', $this->Paginator->paginate($query_tweet, ['limit' => 8]));
我得到了
错误:SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
如果您使用SQL关键字作为表列名,则可以在config / app.php中为数据库连接启用标识符引用。
SQL查询:
SELECT
Users.username AS `Users__username`,
Users.avatarprofil AS `Users__avatarprofil`,
Tweet.contenu_tweet AS `Tweet__contenu_tweet`,
Tweet.created AS `Tweet__created`,
Tweet.nb_commentaire AS `Tweet__nb_commentaire`,
Tweet.nb_partage AS `Tweet__nb_partage`,
Tweet.nb_like AS `Tweet__nb_like`
FROM
tweet Tweet
LEFT JOIN
users Users ON Users.username = (Tweet.user_id)
WHERE (
MATCH(Tweet.contenu_tweet) AGAINST(:search)
AND private = :c0
)
ORDER BY
Tweet.created DESC
LIMIT
8 OFFSET 0
我在PHPmyadmin尝试了这个查询并且它有效,我有很多测试,看看我是否得到了搜索,我有它
我真的不知道是什么问题,我在其他页面上使用Paginator并且它可以工作
答案 0 :(得分:0)
finnaly,我通过创建新路线获得我想要的东西,我不再使用str_replace
最终代码
<?= $this->Paginator->options([
'url' => ['-'.$search.'']
]);
echo $this->Paginator->next('Next page'); ?>
和新路线
Router::connect('/search/index/-:string',['controller' => 'Search', 'action' => 'index']);
非常感谢所有帮助我的人,特别是Mathew Foscarini