在laravel和或上按标签搜索

sqougxex  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(352)

我期待改善关键字引擎。这里是上下文。
3个表格:目录、目录、标签、标签

content
id  | content
8 | My content

contents_tags
id  | content_id | tag_id
1 | 8 | 1
2 | 8 | 2
3 | 8 | 3
4 | 8 | 4

tags
id | name
1 | Webs
2 | Web 2.0
3 | Toto
4 | Secret Web
5 | Titi

我尝试以下行为:
所以有这个标签的8个内容:“webs”+“web2.0”+“toto”+“secret web”
查找时必须显示:
腹板(%)

web 2.0版
web(%)总计
网托托
秘密网
秘密(%)
但不是在研究上
网络3.0
我必须用mysql而不是php来做这件事,因为我使用分页
我的当前代码:

public function searchByTag($q)
{
    $tag = Tag::where('name', 'LIKE', '%' . $q . '%')->get();

    if($tag->isEmpty()) {
        if ($q == trim($q) && strpos($q, ' ') !== false) {
          $q = explode(" ", $q);
          $tag = Tag::where('name', 'LIKE', $q[0] . '%')
            ->OrWhere('name', 'LIKE', $q[1] . '%')
            ->get();
        }
    }
    $query = Content::where('status', Content::STATUS_PUBLISHED);

    foreach($tag as $t) {
        $query->whereHas('tags', function ($query) use ($t) {
            $query->where('tag_id', $t->id);
        });
    }
    return !$tag->isEmpty()
        ? $query->orderBy('published_at','DESC')
        : null;
}

它适用于“web+titi”搜索或“web+2.0”,但不适用于“web”

ojsjcaue

ojsjcaue1#

用这个

public function searchByTag($q)
{
    $tag = Tag::where('name', 'LIKE', '%' . $q . '%')->get();

    if($tag->isEmpty()) {
        if ($q == trim($q) && strpos($q, ' ') !== false) {
          $q = explode(" ", $q);
          $tag = Tag::where('name', 'LIKE', $q[0] . '%')
            ->OrWhere('name', 'LIKE', $q[1] . '%')
            ->get();
        }
        else
        {
             $tag = Tag::where('name', 'LIKE', $q)
                     ->get();
        }
    }
    $query = Content::where('status', Content::STATUS_PUBLISHED);

    foreach($tag as $t) {
        $query->whereHas('tags', function ($query) use ($t) {
            $query->where('tag_id', $t->id);
        });
    }
    return !$tag->isEmpty()
        ? $query->orderBy('published_at','DESC')
        : null;
}

相关问题