Activerecord 如何像CdBCriteria中那样编写查询?
我读过一些帖子和文档。还是不明白为什么这个代码不起作用。有人能帮我解决这个问题吗Activerecord 如何像CdBCriteria中那样编写查询?,activerecord,yii,Activerecord,Yii,我读过一些帖子和文档。还是不明白为什么这个代码不起作用。有人能帮我解决这个问题吗 class SearchController extends Controller { public function actionResults() { $search = $this->getPost('search', ''); $criteria = new CDbCriteria(); $criteria->condition
class SearchController extends Controller
{
public function actionResults()
{
$search = $this->getPost('search', '');
$criteria = new CDbCriteria();
$criteria->condition = 'username like :username';
$criteria->params = array(
':username' => '"%' . $search . '%"'
);
$results = User::model()
->findAll($criteria);
$this->render('search', array(
'search' => $search,
'results' => $results,
));
}
}
Yii profiler始终向我显示此查询:
SELECT * FROM `user` `t` WHERE username like :username
我不明白为什么“:username”仍然是“:username”,并且不能用$search值替换
我已经用这个解决方案解决了:
class SearchController extends Controller
{
public function actionResults()
{
$results = User::model()
->findAll(array(
'condition' => 'username like :username',
'params' => array(
':username' => '%'. $this->getPost('search') .'%'
)
));
$this->render('search', array(
'search' => $this->getPost('search'),
'results' => $results,
));
}
}
但是仍然不明白为什么探查器会显示不完整的查询而不是呈现的查询。您可以像这样使用addSearchCondition函数, 参考
返回“SELECT*FROM
user
t
WHERE username-LIKE:ycp0”。什么是“:ycp0”?:ycp0是自动生成的绑定参数,它的值是$search。我知道=)。我不知道为什么这个值没有绑定!可以重写为$results=User::model()->findAll('username-LIKE:username',array(':username'=>'%'。$this->getPost('search').%'))代码>相当短,但执行相同的操作。
$criteria = new CDbCriteria();
$criteria->addSearchCondition('username',$search);
class SearchController extends Controller
{
public function actionResults()
{
$results = User::model()
->findAll(array(
'condition' => 'username like :username',
'params' => array(
':username' => '%'. $this->getPost('search') .'%'
)
));
$this->render('search', array(
'search' => $this->getPost('search'),
'results' => $results,
));
}
}