Laravel Query 생성자는 하위 쿼리를 효율적으로 처리합니다
] Eloquent ORM을 사용하여 하위 Queries에서 데이터를 검색 할 때 개발자는 종종 toSql ()
및 기본 쿼리를 조합하여 사용합니다. 이 방법은 효과적이지만 직관적이지는 않습니다. 다음은보다 효율적인 솔루션입니다.
예를 들어, 다음 하위 퀘스트에서 결과 수를 추출하려면 :
SELECT COUNT(*)
FROM (
SELECT *
FROM abc
GROUP BY col1
) AS a;
Laravel을 사용하면 mergebindings
를 사용하여 기본 쿼리를 웅변 쿼리로 병합 할 수 있습니다. 먼저, 우리는 하위 퀘스트에 대한 웅변적인 빌더 인스턴스를 만듭니다 :
$sub = Abc::where(..)->groupBy(..);
그런 다음, 우리는 db :: 테이블
를 사용하여 서브 쿼리를 참조하고 해당 바인딩을 수동으로 설정하는 새 테이블을 만듭니다 :
$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
->mergeBindings($sub->getQuery()) // 获取底层查询构造器
->count();
이 접근법은 올바른 바인딩이 병합 쿼리에 적용되도록하여 문자열 작업을 수동으로 수행하지 않고 원하는 결과를 얻습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3