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