[英]Yii controller method SQL query
我试图从表单执行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检索以将数字结果放入另一个表格字段中?
如何添加原始查询的一部分以避免输入零?
回答
查看应如何在CDbCommand的where()
指定查询,该查询应首先在列表中指定mysql优先级最低的运算符where()
,这取决于您的sql):
数组(运算符,操作数1,操作数2,...),
在的地方条件的评估发生在序换句话说,因此你在一种前缀符号的指定运营商。
例如,如果您有:
Where (somecolumn like %somevalue%) AND (somecolumn!=somevalue)
您将其写为:
AND (somecolumn!=somevalue) (like (somecolumn %somevalue%))
因此,这转化为:
->where(array('and','std_rate!=0', array('like', 'country', '%'.$country.'%')))
实际上,通过检查CDBCommand的源代码,尤其是processConditions
函数 ,可以更好地理解这processConditions
。
还以这种方式返回查询是否允许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!
注意:
'%$country%'
将不起作用,但'%'.$country.'%'
将起作用。
我对评估的理解是preorder和prefix表示法,不确定yii团队是否打算那样做!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.