替代laravel whereHas方法

zwc4228986發表於2022-06-24

這是一個可以提升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

The MIT License (MIT).

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章