如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询
Posted
技术标签:
【中文标题】如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询【英文标题】:How to use query result and query again using LIKE statement in Laravel 【发布时间】: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());
我知道这不是我最好的,但需要一些帮助......最后有分页结果也很酷。 那么,如何从标题有字符的问题表中获取问题集合。任何帮助都将受到欢迎!
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel 在 LIKE 搜索中使用 ORM 从两个表中获取数据
在 Laravel 中使用“LIKE”查询将数组转换为字符串
如何使用 WHERE LIKE (或等效)搜索 Laravel 集合