2014-02-25 49 views
1

如何在model()->findByAttributes()中运行'OR'条件?表“tbl_category”没有名为“select”的列?

这是我的代码:

$criteria->condition='url_title_en=:x OR url_title_da=:x'; 
$criteria->params=array(':x'=>$_GET['purl_title']); 
$parentcat = Category::model()->findByAttributes($criteria); 

但我发现了这个错误:

Table "tbl_category" does not have a column named "select".

+0

你想要的结果是什么......?你需要向我们展示你的Category类和它的model()方法 – Tomazi

+0

我只需要使用$ _GET标准来获取类别id。 'url_title_en','url_title_da'是字段名称,我更新了我的问题。 –

+0

http://www.yiiframework.com/forum/index.php/topic/40238-adding-or-condition/page__view__findpost__p__192543 –

回答

3

您可以使用或这样

$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”,因为条件会翻译您的查询,如"select * where category_id=3"。现在findByAttributes()将其作为属性并尝试查找它。这就是为什么它表明tble_category不能找到错误select.Here是警予http://www.yiiframework.com/doc/api/1.1/CActiveRecord#findAll-detail

+0

感谢您的细节,它的工作现在。 –

+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); 
相关问题