【问题标题】:How to use query result and query again using LIKE statement in Laravel如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询
【发布时间】:2019-12-09 21:39:51
【问题描述】:

如果标题中有一些字符,我正在尝试使用问题结果并再次提出问题。 如果我在 condition_question 表中查询,我会得到预期的结果。

public function showQuestions($category)
    {
        $myArray = array($category);

        $questions = Question::whereIn('question_id', function ($query) use ($myArray) {
            $query->select('question_id')
                ->from('condition_question')
                ->whereIn('condition_id', $myArray);
        })->orderBy('question_id', 'desc')->paginate(20);

        return QuestionLiteResource::collection($questions);
}

问题:我现在如何使用 $questions 结果并使用 LIKE 语句再次查询。到目前为止,我尝试了很多东西,例如像这样,但是因为我收到错误而缺少一些东西:

public function showQuestions($category, $queryQuestion)
    {
        $myArray = array($category);

        $chary = $queryQuestion;

        $questions = Question::whereIn('question_id', function ($query) use ($myArray) {
            $query->select('question_id')
                ->from('condition_question')
                ->whereIn('condition_id', $myArray);
        })->get();

        $results = $questions->where('question_title', 'LIKE', "%{$chary}%")->get();

        return QuestionLiteResource::collection($results->values());
}

我知道这不是我最好的,但需要一些帮助......最后有分页结果也很酷。 那么,如何从标题有字符的问题表中获取问题集合。任何帮助都将受到欢迎!

【问题讨论】:

    标签: php sql laravel laravel-5


    【解决方案1】:

    您可能知道,一旦您调用 get() 函数,您就会得到结果并且无法进一步查询。也许这会起作用:

    public function showQuestions($category, $queryQuestion)
        {
            $myArray = array($category);
    
            $chary = $queryQuestion;
    
            $questions = Question::whereIn('question_id', function ($query) use ($myArray) {
                $query->select('question_id')
                    ->from('condition_question')
                    ->whereIn('condition_id', $myArray);
            })
            ->where('question_title', 'LIKE', "%{$chary}%")
            ->get();
    
            return QuestionLiteResource::collection($questions);
    }
    

    【讨论】:

    • 谢谢,它有效!我只是在末尾添加了 get() 而不是 orderBy('question_id', 'desc')->paginate(20);通过这种方式,我得到了我的分页和顺序。谢谢。
    【解决方案2】:

    由于您在问题查询中调用了get(),因此您得到的结果为Laravel Collection。

    要过滤集合,您可以使用filter() 函数。

    示例代码

    $results = $questions->filter(function($question) use ($chary) {
        return Str::contains($question->question_title, $chary);
    });
    

    【讨论】:

    • 嗨 Tharaka。很好的答案,它确实返回对象数组。如何实现分页和orderBy?
    • 没关系,我通过结合 Kevin Bui 的答案和 get() 最后添加 orderBy('question_id', 'desc')->paginate(20);谢谢!
    【解决方案3】:
    i think you can use join():
    
            public function showQuestions($category, $queryQuestion)
            {
                $myArray = array($category);
                $chary = $queryQuestion;
    
                $query = Question::getModel()->newQuery();
                $questions = $query
                     ->join('condition_question', function (Builder $join) use ($myArray) {
                       $join->on('questions.question_id', '=', 'condition_question.question_id');
                       $join->whereIn('condition_question.condition_id', $myArray);
                     }) 
                     ->where('questions.question_title', 'like', $chary)
                     ->orderBy('questions.question_id', 'desc')
                     ->paginate(20)
    
                return QuestionLiteResource::collection($questions);
            }
    

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2021-04-03
      • 2023-03-19
      • 2021-08-10
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2012-11-20
      • 2018-02-23
      相关资源
      最近更新 更多