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


Issue in building search with like query using QueryBuilder yii2

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

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,并注意您正在使用的变量。

试试你的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();

你确定$search是字符串还是数组?

例如:操作数 1 应该是列或 DB 表达式,操作数 2 是 表示列或数据库的值的字符串或数组 表达应该是这样的。例如,['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' .