Laravel - 具有多个条件的数据库选择查询

时间:2018-05-04 07:45:35

标签: sql laravel

我试图在db中创建具有多个条件的简单搜索查询。

我想在db帖子中搜索附加到帖子的标记,并检查帖子标题中的搜索字词。

到目前为止,我提出了检查多个帖子的查询,但我现在正在努力检查帖子标题中的多个单词。

$search = $request['search'];
$searchArr = explode(' ',$request['search']);
$searchTitle = [];

foreach ($searchArr as $search){
    $searchTitle[] = ['title','like', "%$search%"];
}

echo Post::with(['allTags'])->whereHas('allTags', function($query) use ($searchArr) {
    for ($i=0; $i < count($searchArr); $i++) {
        if($i==0) {
            $query->Where('name', $searchArr[$i]);
        }else{
            $query->orWhere('name', $searchArr[$i]);
        }

    }
})->where(['published'=>1])->orWhere([['title','like', "%$search%"],['published','=','1']])->get();

如你所见,我使用&#34; for&#34;循环检查多个标签,但我找不到如何在代码的这一部分->orWhere([['title','like', "%$search%"],['published','=','1']])->get();

中执行此操作的方法

有人可以告诉我该怎么做吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

据我了解,您需要使用.ant-tabs-vertical > .ant-tabs-bar .ant-tabs-tab { height: 90px; margin: 0; padding: 0; width: 30px; -ms-word-break: break-all; word-break: break-all; writing-mode: tb-rl; } 方法。

小心这会导致SQL注入

whereRaw

您应该构建SQL,然后使用whereRaw方法使用基础PDO对象进行绑定:

foreach ($searchArr as $search) {
    $searchTitle[] = ['title','like', "%$search%"];
}

然后在你的查询字符串中:

$searchQuery = implode(',', array_map(function($item) { return 'title like \"?\"'; }, $searchArray));

如果你真的在Post

上检查标题,那就更容易了
...->whereHas('allTags', function($query) use ($searchQuery, $searchArray) {
    $query->whereRaw($searchQuery, $searchArray, 'or');
})

另外请务必查看评论。

答案 1 :(得分:0)

根据我的理解,如果搜索字符串中的单词包含多个单词,您希望将其中断,如下例所示:

<?php
$search_term = 'test1 test2 test3';
$keywords = explode(" ", preg_replace("/\s+/", " ", $search_term));
foreach($keywords as $keyword){
 $wherelike[] = "title LIKE '%$keyword%' ";
}
$where = implode(" and ", $wherelike);

$query = "select * from table where $where";

echo $query;

并使用Laravel whereRaw()方法将其作为原始查询执行