gpt4 book ai didi

php - 如何使用 whereHas 优化此查询?

转载 作者:行者123 更新时间:2023-11-29 01:20:34 25 4
gpt4 key购买 nike

我使用此查询过滤掉具有城市和类别的商店。当我在 stores 表中有大约 1000 条记录时,它工作正常。现在,当我有 5000 条记录时,生成结果大约需要 3-10 秒。

在我的案例中,一家商店属于多个类别。

如何使用 Eloquent orm 或 DB::raw() 优化此查询?

$stores = Store::where('city_id', $city_id)
->where('disabled', '0')
->whereHas('categories', function($q) use ($category_id){
$q->where('category_id', '=', $category_id);
})
->orderBy('rating','DESC')->paginate(10);

最佳答案

我使用 whereRaw 解决了我的问题,因为 DB::raw()DB::select() 不能 分页() 集合。

问题:

执行时间:11.449304103851s

city_id = 6 & $category_id = 1

$stores = Store::where('city_id', $city_id)
->where('disabled', '0')
->whereHas('categories', function($q) use ($category_id){
$q->where('category_id', '=', $category_id);
})
->orderBy('rating','DESC')->paginate(10);

解决方法:

执行时间:0.033660888671875s

city_id = 6 & $category_id = 1

$stores = Store::
where('city_id', $city_id)
->where('disabled', '0')
->whereRaw('stores.id in (select store_id from store_categories_pivot where category_id = ?)', [$category_id])
->orderBy('rating','DESC')
->paginate(10);

关于php - 如何使用 whereHas 优化此查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com