首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xPDO将整数编译为字符串

xPDO将整数编译为字符串
EN

Stack Overflow用户
提问于 2013-11-25 08:32:02
回答 3查看 692关注 0票数 0
代码语言:javascript
复制
$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();

返回:

代码语言:javascript
复制
`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。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-26 06:14:10

看来我找到了另一个解决办法--最简单的办法是

$query->where("price.value >= 6000");

以及与okyanet解决方案相结合的最佳方法

$query->where(“强制转换(price.value为无符号整数) >= 6000");

它们在xPDO中都是正确的。

票数 0
EN

Stack Overflow用户

发布于 2013-11-26 03:00:26

这可能不起作用,因为"price“是连接上使用的表别名;您需要针对实际的字段- price.value运行where条件。

代码语言:javascript
复制
$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“转换为整数(未经测试):

代码语言:javascript
复制
$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。浮动/十进制通常是一种更合适的价格类型,但这取决于你;)

票数 2
EN

Stack Overflow用户

发布于 2013-12-27 08:59:28

对我来说,正确的方法是使用

代码语言:javascript
复制
$whereArray = array('CAST(:price.value:as unsigned)>=' => 6000);
//then put it to
$query->where($whereArray);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20187829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档