Cakephp 3 gt、lt、gte和lte问题
我在CakePHP3中遇到了一个条件问题。我正在尝试处理深度关联模型,并为搜索引擎构建大型查询 在这里,查询被删除:Cakephp 3 gt、lt、gte和lte问题,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我在CakePHP3中遇到了一个条件问题。我正在尝试处理深度关联模型,并为搜索引擎构建大型查询 在这里,查询被删除: 选择 Ouvrages.zone_id为'Ouvrages__zone_id`, Ouvrages.parent\u id为'Ouvrages\u parent\u id`, Ouvrages.classe\u ouvrage\u id作为'Ouvrages\u classe\u ouvrage\u id`, Ouvrages.numero作为'Ouvrages\uu numer
选择
Ouvrages.zone_id为'Ouvrages__zone_id`,
Ouvrages.parent\u id为'Ouvrages\u parent\u id`,
Ouvrages.classe\u ouvrage\u id作为'Ouvrages\u classe\u ouvrage\u id`,
Ouvrages.numero作为'Ouvrages\uu numero',
Valeurs.valeur称为“Valeurs\uuu valeur”
从…起
ouvrages ouvrages
内连接
元素
在Ouvrages.id=(
Elements.ouvrage\u id
)
内连接
瓦留斯瓦留斯
在元素上。id=(
Valeurs.element_id
)
内连接
特征虫特征虫
在Caracteristiques.id=(
瓦勒尔斯·卡拉特斯蒂克
)
哪里
(
Ouvrages.zone_id in(
:c0,:c1,:c2,:c3,:c4,:c5,:c6,:c7,:c8,:c9,:c10,:c11
)
和Ouvrages.classe_ouvrage_id=:c12
AND Elements.classe_element_id=:c13
和Valeurs.caracteristique_id=:c14
和valeur>:c15
)
分组
瓦勒
如果我在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查询。我将日志配置为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)
不起作用。我理解我的错误。实际上,我们构建了一个奇怪的Valeurs
表,其中包含一个与caracteristic
关联的列value
。此值
列定义为varchar(255)
,但可以包含数字、字符串或日期。我们知道当前值的类型,因为我们还有一个type
列
但由于varchar
定义,CakePHP ORM会自动将每个数据转换为字符串。我们必须自己发布数据:
function ($exp) use ($data) {
return $exp->{$data['operand']}('valeur', $data['valeur'], 'integer');
};
“不给我相同的结果”和“不起作用”不是正确的问题描述,请更具体地说明到底发生了什么/结果是什么样子。我正在尝试将字段“valeur”与输入值进行比较。实体的值为10,输入值为5。如果我正在执行
函数($exp),请使用($value){return$exp->gt('valeur',$value);}
Cakephp-ORM在mysql控制台中调试的sql复制和粘贴工作正常时不会给我任何结果。如果我使用literal,比如$query->where(['valeur>'=>$value]),也是一样的代码>为避免歧义,我建议您使用Valeurs.valuer
,尽管这不应该是问题所在。在控制台中尝试时,您是使用显示的查询和placesholders并手动插入值,还是使用DebugKit SQL日志中输出的查询?如果是前者,那么请使用DebugKit检查带有插入值的查询的外观,以及它是否返回任何结果(SQL日志表中的行列)。是的,我正在使用带有占位符的查询。我使用PHPStorm运行mysql查询,它会自动绑定占位符。问题是我无法检查debugkit,因为我在AJAX中执行搜索。然后使用将查询写入日志文件,或者在MySQL服务器中启用日志记录。