2

我正在尝试从表单执行 AJAX 调用,并在我的模型中编写控制器方法以将结果传递回表单。我不熟悉 Yii SQL 语句或在 Yii 上下文中检索/传递数据。任何人都可以指导/纠正我试图写这个的逻辑。

这是原始的mysql查询

"SELECT AVG(rate_syr_mh)FROM packaging_metrics WHERE country LIKE '" . mysql_real_escape_string($country)."'". "AND std_rate != 0 

" 到目前为止,这是我的控制器操作。我不确定我是否在正确的轨道上。参数 $country 应该是从特定更改的表单提交的表单输入。

    public function countryRate($country)
{

$country_std_rate = Yii::app()->db->createCommand() 
    ->select('AVG(std_rate)') 
    ->from('packaging_metrics') 
    ->where(array('like', 'country', '%$country%'))
    ->queryRow();

    return $country_std_rate;


}

如何添加原始查询的部分以避免零条目?

以这种方式返回查询是否还允许 AJAX 检索以接收要放入另一个表单字段的数字结果?

4

1 回答 1

1

如何添加原始查询的部分以避免零条目?

回答

查看应该如何为CDbCommand'swhere()指定查询,具有最低mysql 优先级的运算符(但当然根据您的 sql)应该在列表中首先指定:

数组(运算符,操作数 1,操作数 2,...),

换句话说,where 条件的求值是预先发生的,因此您可以在一种前缀表示法中指定运算符。

例如,如果您有:

Where (somecolumn like %somevalue%) AND (somecolumn!=somevalue)

你把它写成:

AND (somecolumn!=somevalue) (like (somecolumn %somevalue%))

所以这转化为:

->where(array('and','std_rate!=0', array('like', 'country', '%'.$country.'%')))

这实际上可以通过查看 CDBCommand 的源代码,特别是processConditionsfunction来更好地理解。


以这种方式返回查询是否还允许 AJAX 检索以接收要放入另一个表单字段的数字结果?

回答:没有。

要返回 ajax 数据,您应该回显您的输出。此外,您可以使用CJSON::encode()json 编码您的返回值:

echo CJSON::encode($country_std_rate); // instead of return $country_std_rate
Yii::app->end(); // this is also useful in most situations, almost forgot to add! 

笔记:

  1. '%$country%'不会工作,但'%'.$country.'%'会。

  2. preorder 和 prefix notation 是我对评估的理解,不确定 yii 团队是否打算这样做!

于 2012-07-17T22:57:02.007 回答