【问题标题】:Issue in building search with like query using QueryBuilder yii2使用 QueryBuilder yii2 使用类似查询构建搜索的问题
【发布时间】:2016-01-27 07:46:57
【问题描述】:

我正在尝试使用 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();
    }

我在最后尝试了没有-&gt;all() 的查询,但var_dump 值将是查询本身,它不会被执行。和-&gt;all() 我得到那个错误。

【问题讨论】:

  • $search = new Query;-&gt;orWhere(['like' , 'blog' , $search])。您传递对象而不是字符串。将$search = new Query; 重命名为$query = new Query;
  • @ineersa 我正在尝试使用类似查询检查 db 中搜索到的单词,我还能做些什么来执行此任务?
  • 开始使用好的 IDE,public static function searchBlog($search = null)$search = new Query();。你是在开玩笑还是看不出你的代码有什么问题。
  • @ineersa OMG:谢谢,那次冲突是因为在编写查询后进行了编辑:| ,我完全错过了

标签: php mysql yii yii2 query-builder


【解决方案1】:
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,并注意您正在使用的变量。

【讨论】:

    【解决方案2】:

    试试你的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 变量中创建了一个查询实例,所以显然不是这样
    【解决方案3】:

    你确定 $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'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 2010-11-27
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多