$query = $this->modx->newQuery('modResource');
$query->leftJoin('modTemplateVarResource', "price", array("modResource.id = price.contentid", "price.tmplvarid = 2"));
$query->where(array("price:>=" => 6000));
$query->prepare();
echo $query->toSql();返回:
`modResource`.`context_key` AS `modResource_context_key`, `modResource`.`content_type` AS `modResource_content_type`, `modResource`.`uri` AS `modResource_uri`, `modResource`.`uri_override` AS `modResource_uri_override`, `modResource`.`hide_children_in_tree` AS `modResource_hide_children_in_tree`, `modResource`.`show_in_tree` AS `modResource_show_in_tree`, `modResource`.`properties` AS `modResource_properties`
FROM `modx_site_content` AS `modResource`
LEFT JOIN `modx_site_tmplvar_contentvalues` `price`
ON ( modResource.id = price.contentid
AND price.tmplvarid = 2 )
WHERE `modResource`.`price` >= '6000' 为什么引用整数?它应该被看作是一个int。
发布于 2013-11-26 06:14:10
看来我找到了另一个解决办法--最简单的办法是
$query->where("price.value >= 6000");
以及与okyanet解决方案相结合的最佳方法
$query->where(“强制转换(price.value为无符号整数) >= 6000");
它们在xPDO中都是正确的。
发布于 2013-11-26 03:00:26
这可能不起作用,因为"price“是连接上使用的表别名;您需要针对实际的字段- price.value运行where条件。
$query = $this->modx->newQuery('modResource');
$query->leftJoin('modTemplateVarResource', "price", array("modResource.id = price.contentid", "price.tmplvarid = 2"));
$query->where(array("price.value:>=" => 6000));
$query->prepare();
echo $query->toSql();在这种情况下,我几乎100%肯定会在哪里工作,即使是字符串。但是,如果仍然遇到问题,可以尝试将"price.value“转换为整数(未经测试):
$query = $this->modx->newQuery('modResource');
$query->leftJoin('modTemplateVarResource', "price", array("modResource.id = price.contentid", "price.tmplvarid = 2"));
$query->where(array("CAST(price.value AS UNSIGNED INTEGER):>=" => 6000));
$query->prepare();
echo $query->toSql();PS。浮动/十进制通常是一种更合适的价格类型,但这取决于你;)
发布于 2013-12-27 08:59:28
对我来说,正确的方法是使用
$whereArray = array('CAST(:price.value:as unsigned)>=' => 6000);
//then put it to
$query->where($whereArray);https://stackoverflow.com/questions/20187829
复制相似问题