提问者:小点点

laravel mysql如何搜索字符串以查看是否存在值


我使用mysql来存储一些项目。在mysql数据库中,每个项目都有一个名为关键字的列,这是一个字符串。数据看起来像这样...

我想搜索一个字符串(即php、react、mysql等),看看它是否包含在每一行的“关键字”列中。我试过使用where和where-in,但无法使其工作。如果关键字中只有一个值,我可以找到工作的地方。

我的控制器的一个例子

    public function php()
    {
        $projects = Projects::where('keywords','like',"php")->get();
        // dump($projects);
        return view('projects.php', ['projects' => $projects]);
    }

我如何使用

    public function react()
    {
        $projects = Projects::whereIn('keywords','react')->get();
        return view('projects.react', ['projects' => $projects]);
    }

当我使用在何处或何地与多个关键字我得到一个空数组。当我只使用一个关键字时(例如,我删除了字符串列中的所有关键字,除了一个),它工作得很好。

但是我想在每列中有多个关键字,因为每个项目将在多个页面中使用。

再次感谢大家!堆栈溢出是炸弹!!!


共1个答案

匿名用户

1列有多个关键字

如果将所有关键字放在一列中,则应使用like with%

$projects = Projects::where('keywords','like',"%php%")->get();

如果你想一次搜索多个关键字:

$projects = Projects::where('keywords','like',"%php%")
->orWhere('keywords','like',"%react%")->get();

2列有一个关键字

若要在列中搜索一个关键字,可以使用

$projects = Projects::where('keywords',"php")->get();

若要在列中搜索多个关键字,可以使用

$projects = Projects::whereIn('keywords',['php','react'])->get();