我正在尝试使用yii2 QueryBuilder对我的网站博客进行搜索查询,但是当我尝试使用->all()
执行查询时出现这样的错误。这是错误:strtr() expects parameter 1 to be string, object given
。这是我的模型和控制器。我不知道是什么导致了这个问题。
控制器:
public function actionSearchBlog()
{
$model = new Blog();
if ($model->load(Yii::$app->request->post())) {
Blog::searchBlog($model->search);
} else {
return $this->render('search',['model' => $model]);
}
}
型号:
public static function searchBlog($search = null)
{
$search = new Query();
$result = $search->select('id','title','blog','picture')
->from('blog')
->where(['like' , 'title' , $search])
->orWhere(['like' , 'blog' , $search])
->all();
echo '<pre>';
var_dump($result);
die();
}
我最后在没有->all()
的情况下尝试了查询,但var_dump
值将是查询本身,并且不会执行。并且->all()
我收到了这个错误。
答案 0 :(得分:4)
public static function searchBlog($search = null)
{
$query = new Query();
$result = $query->select('id','title','blog','picture')
->from('blog')
->where(['like' , 'title' , $search])
->orWhere(['like' , 'blog' , $search])
->all();
echo '<pre>';
var_dump($result);
die();
}
这会奏效。但是,请开始使用IDE,并观察您正在使用的变量。
答案 1 :(得分:0)
试试你的ActiveQuery
: -
$result = (new Query())->select('id','title','blog','picture')
->from('blog')
->where(['like' , 'title' , $search])
->orWhere(['like' , 'blog' , $search])
->all();
echo '<pre>';
var_dump($result);
die();
答案 2 :(得分:-1)
你确定$ search是字符串还是数组?
like:操作数1应该是列或DB表达式,操作数2应该是 表示列或DB的值的字符串或数组 表达应该是这样的。例如,
['like', 'name', 'tester']
将生成name LIKE '%tester%'
。当值范围作为数组给出时,多个LIKE谓词 将使用AND生成和连接。例如,
['like', 'name', ['test', 'sample']]
将生成name LIKE '%test%' AND name LIKE '%sample%'
。该方法将正确引用列名称 并转义值中的特殊字符。有时,您可能希望将百分比字符添加到 如果您自己匹配值,则可以提供第三个操作数
false
这样做。例如,['like', 'name', '%tester', false]
将生成 名称LIKE '%tester'
。