0
$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。

4

3 回答 3

2

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

$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% 确定 where 条件在这种情况下会起作用,即使作为字符串也是如此。但是,如果您仍然遇到问题,您可以尝试将“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。float/decimal 通常是更适合价格的类型,但这取决于您;)

于 2013-11-26T03:00:26.767 回答
0

看来我找到了另一种解决方案 - 最简单的方法是

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

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

$query->where("CAST(price.value AS UNSIGNED INTEGER) >= 6000");

所有这些都在 xPDO 中正常工作

于 2013-11-26T06:14:10.667 回答
0

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

$whereArray = array('CAST(:price.value:as unsigned)>=' => 6000);
//then put it to
$query->where($whereArray);
于 2013-12-27T08:59:28.493 回答