Cakephp 3 gt,lt,gte和lte问题

时间:2015-07-06 15:43:01

标签: cakephp cakephp-3.0

我在CakePHP 3中遇到了条件问题。我正在尝试处理深层关联模型并为搜索引擎构建大查询。

这里查询已经删除:

SELECT
    Ouvrages.zone_id AS `Ouvrages__zone_id`,
    Ouvrages.parent_id AS `Ouvrages__parent_id`,
    Ouvrages.classe_ouvrage_id AS `Ouvrages__classe_ouvrage_id`,
    Ouvrages.numero AS `Ouvrages__numero`,
    Valeurs.valeur AS `Valeurs__valeur` 
FROM
    ouvrages Ouvrages 
INNER JOIN
    elements Elements 
        ON Ouvrages.id = (
            Elements.ouvrage_id
        ) 
INNER JOIN
    valeurs Valeurs 
        ON Elements.id = (
            Valeurs.element_id
        ) 
INNER JOIN
    caracteristiques Caracteristiques 
        ON Caracteristiques.id = (
            Valeurs.caracteristique_id
        ) 
WHERE
    (
        Ouvrages.zone_id in (
            :c0,:c1,:c2,:c3,:c4,:c5,:c6,:c7,:c8,:c9,:c10,:c11
        ) 
        AND Ouvrages.classe_ouvrage_id = :c12 
        AND Elements.classe_element_id = :c13 
        AND Valeurs.caracteristique_id = :c14 
        AND valeur > :c15
    ) 
GROUP BY
    Valeurs.id

如果我在mysql控制台中测试它,它可以正常工作。

但是cakephp的ORM并没有给我相同的结果。功能gt lt gtelte不起作用。

我使用$this->log($query, 'debug')并使用新的查询日志文件配置我的应用配置,但如果我使用debug,我会得到相同的结果:

SELECT 
 Ouvrages.zone_id AS `Ouvrages__zone_id`,
 Ouvrages.parent_id AS `Ouvrages__parent_id`,
 Ouvrages.classe_ouvrage_id AS `Ouvrages__classe_ouvrage_id`,
 Ouvrages.numero AS `Ouvrages__numero`, 
 Valeurs.valeur AS `Valeurs__valeur` 
FROM 
 ouvrages Ouvrages 
INNER JOIN 
 elements Elements 
  ON Ouvrages.id = (
   Elements.ouvrage_id
  ) 
INNER JOIN 
 valeurs Valeurs 
  ON Elements.id = (
   Valeurs.element_id
  ) 
INNER JOIN 
  caracteristiques Caracteristiques 
   ON Caracteristiques.id = (
     Valeurs.caracteristique_id
   ) 
WHERE (
 Ouvrages.zone_id in (
  :c0,:c1,:c2,:c3
 ) 
 AND Ouvrages.classe_ouvrage_id = :c4 
 AND Elements.classe_element_id = :c5 
 AND Valeurs.caracteristique_id = :c6 
 AND valeur >= :c7) 
GROUP BY 
 Valeurs.id 

感谢ndm解释在AJAX中调试sql查询。我使用log at true配置我的连接,我得到了这样的结果:

WHERE (
 Ouvrages.zone_id in (
  34,35,44,46
 ) 
 AND Ouvrages.classe_ouvrage_id = '60' 
 AND Elements.classe_element_id = '62'
 AND Valeurs.caracteristique_id = '25' 
 AND valeur >= '5') 

我正在尝试投射这些数字,但我还没找到。简单地(int)不起作用。

1 个答案:

答案 0 :(得分:0)

我理解我的错误。实际上,我们构建了一个奇怪的value表,其中caracteristic列与value相关联。此varchar(255)列定义为type,但可以包含数字,字符串或日期。我们知道当前值的类型,因为我们还有一个varchar列。

但是由于function ($exp) use ($data) { return $exp->{$data['operand']}('valeur', $data['valeur'], 'integer'); }; 定义,CakePHP ORM会自动将每个数据转换为字符串。我们必须自己投射我们的数据:

{{1}}