首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图通过具有最优参数的雄辩能力在模型中搜索

试图通过具有最优参数的雄辩能力在模型中搜索
EN

Stack Overflow用户
提问于 2019-09-21 19:33:59
回答 1查看 66关注 0票数 1

我正在尝试弄清楚为什么我的查询忽略了除标题和描述之外的所有内容。通向控制器的搜索按钮用于按类别、按地区、按价格过滤不同类型的广告。例如,如果我现在搜索现有的广告,其按标题/关键字找到,即使我选择了不同的地区/类别/价格范围,->也会始终显示

我正在尝试使用一些可以节省大量if语句的东西来检查它们是否存在于请求中。也许其他选项si可以使用https://github.com/mohammad-fouladgar/eloquent-builder构建我的查询

代码语言:javascript
运行
复制
 public function index(Request $request)
    {
        $keyword = $request['keyword'];
        $category_id = $request['category_id'];
        $type_id = $request['type_id'];
        $region_id = $request['region_id'];
        $min_price = $request['min_price'];
        $max_price = $request['max_price'];


        $result = Ad::when($keyword, function ($q) use ($keyword) {
            return $q->where('title', 'like', '%' . $keyword . '%')->orWhere('description', 'like', '%' . $keyword . '%');
        })
            ->when($category_id, function ($q) use ($category_id) {
                return $q->where('category_id', $category_id);
            })
            ->when($region_id, function ($q) use ($region_id) {
                return $q->where('region_id', '=', $region_id);
            })
            ->when($type_id, function ($q) use ($type_id) {
                return $q->where('adtype_id', '=', $type_id);
            })
            ->when($min_price, function ($q) use ($min_price) {
                return $q->where('price', '>=', $min_price);
            })
            ->when($max_price, function ($q) use ($max_price) {
                return $q->where('price', '<=', $max_price);
            })
            ->paginate(8);

我的get参数url是这样的: search?keyword=&category_id=0®ion_id=0&type_id=0&min_price=&max_price=

在mysql中,当我按名称搜索现有广告并查找不同的类别时,生成的查询为:

代码语言:javascript
运行
复制
select * from `ads` where `title` like '%test test%' or `description` like '%test test%' and `category_id` = '2' limit 8 offset 0

找到了广告,但实际类别是1,而不是2,对于所有其他最佳参数都是相同的。

EN

回答 1

Stack Overflow用户

发布于 2019-09-21 19:54:14

您可以使用whereHas编辑查询以查找特定关系。此方法将允许您在关系约束中添加自定义约束,例如检查comment.And的内容以检查最大/最小价格,使用where方法。所以,你可以这样使用它:

代码语言:javascript
运行
复制
$result = Ad::when($keyword, function ($q) use ($keyword) {
            return $q->where('title', 'like', '%' . $keyword . '%')->orWhere('description', 'like', '%' . $keyword . '%');
        })
            ->whereHas('category_relation_name', function ($q) use ($category_id) {
                return $q->where('category_id', $category_id);
            })
            ->whereHas('region_relation_name', function ($q) use ($region_id) {
                return $q->where('region_id', $region_id);
            })
            ->whereHas('type_relation_name', function ($q) use ($type_id) {
                return $q->where('adtype_id', $type_id);
            })
            ->where('price', '>=', $min_price);
            ->where('price', '<=', $max_price);
            ->paginate(8);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58039883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档