User::where('theme_code', 'gw')->where(function ($query) { $query->where("status", 0)->orwhere([["entry_time", ">=", time()], ["resignation_time", "=<", time()]]); }) ->whereHas("adviser", function ($query) use ($user) { $query->where("lft", ">=",$user['lft'])->where("rgt","<=",$user['rgt']); }) ->with([ 'adviser' => function ($query) { $query->select(['user_id', 'city_id', 'brand_id', 'affiliate_id', 'region_id', 'branch_id', 'framework_name']); } ]) ->select(['user.id', 'user.name'])优化一下
时间: 2024-03-10 07:43:20 浏览: 46
jsonquery:基本 json -> sqlalchemy 查询构建器
可以尝试以下优化:
1.添加索引:在 user 表中添加 theme_code 和 status 字段的索引,可以提高查询效率。
2.缓存查询结果:如果查询结果不会经常变化,可以使用缓存来减少查询次数,提高查询效率。
3.使用原生 SQL 查询:如果以上方法无法提高查询效率,可以使用原生的 SQL 查询来替代 Eloquent 查询,因为原生 SQL 查询通常比 Eloquent 查询更快。
4.使用 exists 方法替代 whereHas 方法:exists 方法比 whereHas 方法更快,因为它只查询是否存在关联记录,而不查询关联记录的具体内容。
优化后的代码如下:
```php
User::where('theme_code', 'gw')
->where(function ($query) {
$query->where("status", 0)
->orWhere([["entry_time", ">=", time()], ["resignation_time", "=<", time()]]);
})
->whereExists(function ($query) use ($user) {
$query->select(DB::raw(1))
->from('adviser')
->whereColumn('adviser.user_id', 'user.id')
->where("lft", ">=", $user['lft'])
->where("rgt", "<=", $user['rgt']);
})
->with([
'adviser' => function ($query) {
$query->select(['user_id', 'city_id', 'brand_id', 'affiliate_id', 'region_id', 'branch_id', 'framework_name']);
}
])
->select(['user.id', 'user.name'])
->get();
```
注意,这里使用了 exists 方法替代了 whereHas 方法,并且使用了原生的 SQL 查询。同时,这里也可以添加索引来提高查询效率。
阅读全文