如何在model()->findByAttributes()
中运行'或'条件?
这是我的代码:
$criteria->condition='url_title_en=:x OR url_title_da=:x';
$criteria->params=array(':x'=>$_GET['purl_title']);
$parentcat = Category::model()->findByAttributes($criteria);
但是我收到了这个错误:
表“tbl_category”没有名为“select”的列。
答案 0 :(得分:3)
你可以像这样使用OR
$criteria=new CDbCriteria();
$criteria->select='category_id';
$criteria->condition='url_title_en=:x';
$criteria->addCondition('url_title_da=:x','OR');
$criteria->params=array(':x'=>$_GET['purl_title']);
在上面的代码中,addCondition使用OR运算符追加额外条件。现在如果你期望多个记录,那么你可以使用
$parentcat = Category::model()->findAll($criteria);
如果你期望单曲,你可以使用
$parentcat = Category::model()->find($criteria);
您在此处使用的是您正在将标准传递给函数FindByAttributes()
,该函数查找传递给它的属性的记录。现在,您传递的是条件,它会将第一个单词作为“选择”,因为条件会将您的查询翻译为"select * where category_id=3"
。现在findByAttributes()
将其作为属性并尝试找到它。这就是为什么它显示错误,tble_category找不到select.Here是yii的官方文档http://www.yiiframework.com/doc/api/1.1/CActiveRecord#findAll-detail
答案 1 :(得分:1)
您的代码唯一的问题是您使用的是findByAttributes
而不是findAll
。
$criteria = new CDbCriteria;
$criteria->condition = '`url_title_en` = :uri OR `url_title_da` = :uri';
$criteria->params = array(':uri' => $_GET['purl_title']);
$records = Category::model()->findAll($criteria);
// print all records fetched.
print_r($records);