cakephp 3 paginator不起作用

时间:2017-11-16 14:03:46

标签: cakephp pagination cakephp-3.0 query-builder

我正在将这个查询与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并且它可以工作

1 个答案:

答案 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