使用QueryBuilder yii2使用类似查询构建搜索的问题

时间:2016-01-27 07:46:57

标签: php mysql yii yii2 query-builder

我正在尝试使用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()我收到了这个错误。

3 个答案:

答案 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'