Cakephp 3 gt、lt、gte和lte问题

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

我在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 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服务器中启用日志记录。