2017-11-16 2 views
1

Ich bin curently diese Abfrage mit CakePHP 3 für eine kleine Suchmaschinecakephp 3 paginator funktioniert nicht

$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']); 

Diese Abfrage funktioniert perfekt, aber ich mag den paginator verwenden, wie dies

$this->set('resultat_tweet', $this->Paginator->paginate($query_tweet, ['limit' => 8])); 

i bekommen

Error: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

Wenn Sie SQL-Schlüsselwörter als Tabellenspaltennamen verwenden, Sie Kennung qu aktivieren ting für Ihre Datenbankverbindung in der config/app.php.

SQL Query:

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 

Ich habe versucht, diese Abfrage in phpMyAdmin und es funktioniert, ich habe viele Tests, um zu sehen, ob ich die Suche zu bekommen, und ich habe es

ich wirklich nicht wissen, was das Problem ist , i den Paginator mit ‚auf anderen Seiten m und es

+0

Ich vermute, dass die paginator die Abfrage wird das Klonen und während der Klonierung der begrenzenden Variable ist verloren. Dies könnte ein Fehler sein, der in den github-Problemen und nicht in stackoverflow gemeldet werden sollte. – cgTag

+0

Haben Sie einen Stack-Trace für diesen Fehler? Die Abfrage wird zweimal mit Paginator ausgeführt. Eine für '$ query-> all()' und erneut für '$ cleanQuery-> count()'. Ich will wissen, ob es für den zweiten 'count()' Aufruf fehlschlägt. Siehe 'Paginator.php' um Zeile 118. – cgTag

+0

Ich sah in Zeile 186 von Paginator.php $ cleanQuery = clone $ query; \t $ ergebnisse = $ query-> all(); \t $ numResults = Anzahl ($ Ergebnisse); \t $ count = $ cleanQuery-> count(); ich denke, du hast Recht, die Begrenzungsvariable ist verloren – christ57

Antwort

0

finnaly arbeiten, ich bekomme, was ich will, durch eine neue Route zu schaffen, ich mehr nicht

final c str_replace verwenden

Ode
   <?= $this->Paginator->options([ 
'url' => ['-'.$search.''] 

]); 

     echo $this->Paginator->next('Next page'); ?> 

und die neue Route

Router::connect('/search/index/-:string',['controller' => 'Search', 'action' => 'index']); 

Vielen Dank an alle, die mir geholfen haben, vor allem Mathew Foscarini

Verwandte Themen