Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用QueryBuilder yii2使用like查询生成搜索时出现的问题_Php_Mysql_Yii_Yii2_Query Builder - Fatal编程技术网

Php 使用QueryBuilder yii2使用like查询生成搜索时出现的问题

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

我正在尝试使用yii2 QueryBuilder对我的网站博客进行搜索查询,但是当我尝试使用
->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变量中创建了一个查询实例,显然不是这样