我在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
gte
或lte
不起作用。
我使用$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)
不起作用。
答案 0 :(得分:0)
我理解我的错误。实际上,我们构建了一个奇怪的value
表,其中caracteristic
列与value
相关联。此varchar(255)
列定义为type
,但可以包含数字,字符串或日期。我们知道当前值的类型,因为我们还有一个varchar
列。
但是由于function ($exp) use ($data) {
return $exp->{$data['operand']}('valeur', $data['valeur'], 'integer');
};
定义,CakePHP ORM会自动将每个数据转换为字符串。我们必须自己投射我们的数据:
{{1}}