這是一個可以提升Laravel ORM
關聯關係查詢效能的擴充套件包,
環境
PHP >= 7
laravel >= 5.5
安裝
gitee地址
gitee.com/yjshop/laravel-builder.g...
composer require eugenes/laravel-builder
簡介
Laravel
的關聯關係查詢whereHas
在日常開發中給我們帶來了極大的便利,但是在主表資料量比較多的時候會有比較嚴重的效能問題,主要是因為whereHas
用了where exists (select * ...)
這種方式去查詢關聯資料。
透過這個擴充套件包提供的whereHasIn,whereHasJoin
方法
方法
whereHasIn
App(CompanyStaffModel::class)->whereHasIn('section', function ($query) {
$query->where('id', 1);
})->first();
SELECT *
FROM `lk_company_staff`
WHERE `lk_company_staff`.`id` IN (SELECT `lk_company_staff_section_relation`.`userid`
FROM `lk_company_staff_section_relation`
WHERE `lk_company_staff`.`id` = `lk_company_staff_section_relation`.`userid`
AND `id` = 1) LIMIT 1
whereHasJoin
App(CompanyStaffModel::class)->yjselect('*')->whereHasJoin('section', function ($query) {
$query->yjwhere('id', 1);
})->first();
select `lk_company_staff`.*
from `lk_company_staff`
left join `lk_company_staff_section_relation`
on `lk_company_staff_section_relation`.`userid` = `lk_company_staff`.`id`
where ((`lk_company_staff_section_relation`.`id` = 1)) limit 1
yjwhere
App(CompanyStaffModel::class)->yjwhere('id', 1)->first();
select *
from `lk_company_staff`
where `lk_company_staff`.`id` = 1 limit 1
yjselect
App(CompanyStaffModel::class)->yjselect('id')->first();
select `lk_company_staff`.`id`
from `lk_company_staff` limit 1
yjsum
yjpluck
yjorderBy
yjorderByDesc
orWhereHasIn
orWhereHasNotIn
whereHasMorphIn
orWhereHasMorphIn
License
本作品採用《CC 協議》,轉載必須註明作者和本文連結