Laravel - 如果值包含某个字符串(取自搜索输入),则查询模型

新手上路,请多包涵

我正在使用 Laravel 和 Ajax 实现搜索。所以我有一个属于标签和子类别的产品。另一方面,子类别属于类别。我想检查它们的所有属性(字段值)并检查它们是否包含给定的字符串。通过一些搜索,我发现我必须使用 LIKE 。这是我尝试过的:

 $products = Product::where('name_en', 'LIKE', $search)->get();

但是,如果搜索字符串与值完全匹配,这将获得产品。如果它包含它,我想匹配它。我怎样才能处理 belongsTo 关系?我怎样才能检查标签和子类别的属性?如何将所有内容链接在一起以达到预期的效果?提前致谢。

原文由 Codearts 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 588
1 个回答

你做错了一件事,你的查询返回你完全匹配,因为你给出了确切的字符串。但是你的查询应该是这样的。

 $products = Product::where('name_en', 'LIKE', '%'.$search.'%')->get();

上面的查询将为您提供包含搜索字符串的产品。

如果你想在关系表中搜索,那么你可以使用 laravel 方法 join() 。但是还有另外一种方法 whereHas 但我总是避免使用这种方法,因为它会创建非常复杂的查询。这是非常重的。因此,您可以使用 join() 方法将添加 inner join 与关系表。

下面是加入的例子:

 $products = Product::join('tags', function($builder) {
                        $builder->on('tags.id', '=', 'products.tag_id');
                        // here you can add more conditions on tags table.
                    })
                    join('sub_categories', function($builder) {
                        $builder->on('sub_categories.id', '=', 'products.tag_id');
                        // here you can add more conditions on subcategories table.
                    })
                    ->where('name_en', 'LIKE', '%'.$search.'%')
                    ->get();

这是基本示例,您可以根据需要使用它。

原文由 user2754452 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题