Php 使用QueryBuilder yii2使用like查询生成搜索时出现的问题
我正在尝试使用yii2 QueryBuilder对我的网站博客进行搜索查询,但是当我尝试使用Php 使用QueryBuilder yii2使用like查询生成搜索时出现的问题,php,mysql,yii,yii2,query-builder,Php,Mysql,Yii,Yii2,Query Builder,我正在尝试使用yii2 QueryBuilder对我的网站博客进行搜索查询,但是当我尝试使用->all()执行查询时,出现了类似这样的错误。错误如下:strtr()要求参数1为字符串,对象为给定的。这是我的模型和控制器。我不知道是什么导致了这个问题 控制器: public function actionSearchBlog() { $model = new Blog(); if ($model->load(Yii::$app->request
->all()
执行查询时,出现了类似这样的错误。错误如下:strtr()要求参数1为字符串,对象为给定的
。这是我的模型和控制器。我不知道是什么导致了这个问题
控制器:
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();
}
公共静态函数searchBlog($search=null)
{
$search=新查询();
$result=$search->select('id'、'title'、'blog'、'picture')
->来自('博客')
->其中(['like','title',$search])
->或者在哪里(['like','blog',$search])
->全部();
回声';
$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();
var_dump($结果);
模具();
}
我在最后没有使用
->all()
的情况下尝试了查询,但是var\u dump
值将是查询本身的值,并且不会执行。使用->all()
我就得到了这个错误。试试你的ActiveQuery
:--
$result=(newquery())->选择('id','title','blog','picture'))
->来自('博客')
->其中(['like','title',$search])
->或者在哪里(['like','blog',$search])
->全部();
回声';
$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();
var_dump($结果);
模具();
尝试您的ActiveQuery
如下:--
$result=(newquery())->选择('id','title','blog','picture'))
->来自('博客')
->其中(['like','title',$search])
->或者在哪里(['like','blog',$search])
->全部();
回声';
$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();
var_dump($结果);
模具();
您确定$search是字符串还是数组
like:操作数1应为列或DB表达式,操作数2应为
一个字符串或数组,表示列或DB所包含的值
表情应该是这样的。例如,['like','name','tester']
将生成类似“%tester%”的名称
当值范围以数组形式给定时,将使用多个LIKE谓词
将使用和生成并连接。例如,['like',
'name',['test','sample']
将生成名称,如'%test%'和
名称类似于“%sample%”
。该方法将正确引用列名
并对值中的特殊字符进行转义
有时,您可能需要将百分比字符添加到
通过自己匹配值,您可以将第三个操作数false
提供给
这样做。例如,['like','name','%tester',false]
将生成
名称类似于“%tester”
您确定$search是字符串还是数组 like:操作数1应为列或DB表达式,操作数2应为 一个字符串或数组,表示列或DB所包含的值 表情应该是这样的。例如,
['like','name','tester']
将生成类似“%tester%”的名称
当值范围以数组形式给定时,将使用多个LIKE谓词
将使用和生成并连接。例如,['like',
'name',['test','sample']
将生成名称,如'%test%'和
名称类似于“%sample%”
。该方法将正确引用列名
并对值中的特殊字符进行转义
有时,您可能需要将百分比字符添加到
通过自己匹配值,您可以将第三个操作数false
提供给
这样做。例如,['like','name','%tester',false]
将生成
名称类似于“%tester”
公共静态函数searchBlog($search=null)
{
$query=新查询();
$result=$query->select('id'、'title'、'blog'、'picture')
->来自('博客')
->其中(['like','title',$search])
->或者在哪里(['like','blog',$search])
->全部();
回声';
$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();
var_dump($结果);
模具();
}
这会奏效的。但是要开始使用IDE,并注意您正在使用的变量。公共静态函数searchBlog($search=null)
{
$query=新查询();
$result=$query->select('id'、'title'、'blog'、'picture')
->来自('博客')
->其中(['like','title',$search])
->或者在哪里(['like','blog',$search])
->全部();
回声';
$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();
var_dump($结果);
模具();
}
这会奏效的。但要开始使用IDE,并注意您正在使用的变量。
$search=newquery
和->或where(['like','blog',$search])
。您正在传递对象而不是字符串。重命名$search=新查询
到$query=新查询
@ineersa我正在尝试使用like query检查数据库中的搜索词,我还可以做些什么来执行此任务?开始使用好的IDE,公共静态函数searchBlog($search=null)
和$search=new query()代码>。你是在跟我开玩笑,还是根本看不出你的代码有什么问题。@ineersa OMG:O谢谢你,那次冲突是因为在编写查询后进行了编辑:|,我完全错过了$search=new query
和->或where(['like','blog',$search])
。您正在传递对象而不是字符串。重命名$search=新查询
到$query=新查询
@ineersa我正在尝试使用like query检查数据库中的搜索词,我还可以做些什么来执行此任务?开始使用好的IDE,公共静态函数searchBlog($search=null)
和$search=new query()代码>。你是在开玩笑还是真的看不出你的代码有什么错误。@ineersa OMG:O谢谢你,那次冲突是因为编写查询后的编辑:|,我完全没有注意到这点,正如你所看到的,我已经在$search变量中创建了一个查询实例,显然不是这样,正如你所看到的,我已经在$search变量中创建了一个查询实例,显然不是这样