Je suis actuellement avoir un problème avec Zend Framework dans la pagination 2.Comment définir sql_mode dans Zend Framework 2?
Ce code
public function findAllByCriteria(CourseSearchInput $input) {
$concatDelimiter = self::CONCAT_DELIMITER;
$select = new Select();
$where = new Where();
$having = new Having();
$select->columns(array(
'id', 'title', 'description'
));
$select->from($this->tableGateway->getTable());
$select
->join('coursedata', 'courses.id = coursedata.id', array(
'relevance' => $this->buildRelevanceExpressionFromCriteria($input)
))
;
$having
->greaterThanOrEqualTo('relevance', self::RELEVANCE_MIN);
;
$select->where($where, Predicate::OP_AND);
$select->having($having);
$select->group(array('courses.id'));
$dbAdapter = $this->tableGateway->getAdapter();
// $dbAdapter->getDriver()->getConnection()->execute('SET sql_mode = "";');
$adapter = new \Zend\Paginator\Adapter\DbSelect($select, $dbAdapter);
$paginator = new \Zend\Paginator\Paginator($adapter);
return $paginator;
}
créer cette SQL:
SELECT
`courses`.`id` AS `id`,
`courses`.`title` AS `title`,
`courses`.`description` AS `description`,
MATCH (coursedata.title) AGAINST ('Salsa') * 5 + MATCH (coursedata.description) AGAINST ('Salsa') * 2 AS `relevance`
FROM `courses`
INNER JOIN `coursedata` ON `courses`.`id` = `coursedata`.`id`
GROUP BY `courses`.`id`
HAVING `relevance` >= '3'
Il ueses le MySQL Extensions to GROUP BY
et ne peut pas être exécuté, si le sql_mode
est défini sur ONLY_FULL_GROUP_BY
. Donc, j'ai essayé de réinitialiser le sql_mode
avant que l'instruction soit exécutée (voir la ligne commentée ci-dessus: $dbAdapter->getDriver()->getConnection()->execute('SET sql_mode = "";');
). Mais ça n'a pas marché. Alors, comment puis-je définir le sql_mode
afin d'exécuter mon SQL non standard?
Ceci est seulement une hypothèse, que ma connaissance sql est minime, mais vous pourriez peut-être exécuter cette commande sur l'initiation? Dans votre 'driver_options', ajoutez' PDO :: MYSQL_ATTR_INIT_COMMAND => 'set sql_mode = ""' '. – Sam
Il devrait y avoir (aussi) une autre façon de le faire, puisque je peux donc utiliser SET NAMES ou SET sql_mode. En tous cas. J'ai essayé ces deux dehors: '' driver_options '=> tableau (PDO :: MYSQL_ATTR_INIT_COMMAND =>' SET NAMES \ 'UTF8 \' ',' SET SESSION sql_mode = \ '\' '), 'et' 'driver_options' => tableau (PDO :: MYSQL_ATTR_INIT_COMMAND => 'SET SESSION sql_mode = \' \ '',), '. L'erreur SQL, que j'ai l'intention d'éliminer avec 'sql_mode = ''' est toujours là. Mais peut-être que le mode n'a pas été défini? Comment puis-je vérifier les paramètres PDO actuels/'sql_mode'? – automatix