【问题标题】:Translate SQL Search Query to Eloquent Query将 SQL 搜索查询转换为 Eloquent 查询
【发布时间】:2019-01-01 19:21:20
【问题描述】:

我想咨询以下问题。

select * from `items` 
    where (`item_name` LIKE 'foo' or `item_description` LIKE 'foo') 
    and `item_type` = 'type1' 

翻译成雄辩的。我想出了以下声明:

$items = Item::where('item_type', '=', 'type1')
    ->orWhere('item_name','LIKE','%'.$q.'%')
    ->orWhere('item_description','LIKE','%'.$q.'%')
    ->sortable(['id' => 'desc'])
    ->paginate(10);

在上面的 sn-p 中,$q 将是 foo(这是一个搜索查询)。

问题在于,这并不能完全返回我想要的,因为它还返回属于另一个 item_type 而不是我的示例中的 type1 的项目。

如何在 Eloquent 查询中翻译上述 SQL 查询,使其仅返回包含 foo 且类型为 Type1 的项目?

【问题讨论】:

    标签: php laravel eloquent laravel-query-builder


    【解决方案1】:

    试试这个。你需要一个嵌套的where 闭包:

    $items = Item::where('item_type', '=', 'type1')
                    ->where(function($query) use ($q) {
                        $query->where('item_name','LIKE','%'.$q.'%')
                              ->orWhere('item_description','LIKE','%'.$q.'%');
                    })
               ->sortable(['id' => 'desc'])
               ->paginate(10);
    

    【讨论】:

    • 谢谢先生,非常感谢!这确实有效。您能否解释一下为什么需要嵌套 where 闭包?
    • 你之前的内容是错误的,因为 orWhere("item_name", "LIKE") 会出现在 where("item_type") 之后,这意味着即使其中一个 where 的结果存在,它也会获取它们.为了进一步理解,这将是您从雄辩中提出的查询:“从“item_type”=type1 或 item_name LIKE $q 的项目中选择 *。在我回答的帖子中,它将是 where “item_type”=type1 AND(其中" LIKE $q 或 where "item_description LIKE $q)
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多