이 글에서는 미리 로딩을 사용하여 Laravel 모델 쿼리를 최적화하는 방법에 대한 관련 정보를 주로 소개합니다. 샘플 코드를 통해 이를 매우 자세하게 소개하며, 학습이나 작업이 필요한 모든 사람이 따라할 수 있는 학습 가치가 있습니다. 아래 편집자에게 오셔서 함께 배워보세요. 그것이 모두에게 도움이 되기를 바랍니다.
머리말
이 글은 주로 사전 로딩을 사용하여 Laravel 모델 쿼리를 최적화하는 방법에 대한 관련 내용을 소개하고 참조 및 학습을 위해 공유합니다. 자세한 소개는
소개
ORM(객체 관계형 매핑)을 사용하면 데이터베이스 작업이 매우 쉬워집니다. 데이터베이스 관계가 객체 지향 방식으로 정의되면 관련 모델 데이터를 쉽게 쿼리할 수 있으며 개발자는 기본 데이터베이스 호출을 알아차리지 못할 수 있습니다.
다음에서는 쿼리 최적화 방법을 이해하는 데 도움이 되는 몇 가지 예를 사용합니다.
데이터베이스에서 100개의 개체를 받았고 각 레코드에 1개의 관련 모델(예: ownTo)이 있다고 가정합니다. 기본적으로 ORM을 사용하면 아래와 같이 101개의 쿼리가 생성됩니다.
//获取已发布的100条文章 $posts = Post::limit(100)->get(); //一次查询 $authors = array_map(function($post) { // 对作者模型生成查询 return $post->author->name; }, $posts);
쿼리 시 Post 모델에 모든 작성자도 필요하다는 사실을 알려주지 않으므로 작성자 이름을 가져올 때마다 별도의 쿼리가 발생합니다. 단일 포스트 모델 인스턴스 쿼리.
array_maps 100개의 쿼리가 발생했고, 이전 쿼리까지 더해 총 101개의 쿼리가 생성되었습니다.
사전 로드
다음으로, 연관된 모델 데이터를 사용할 계획이라면 사전 로드를 사용하여 총 101개의 쿼리를 2개의 쿼리로 줄일 수 있습니다. 로드해야 할 사항을 모델에 알려주십시오. 다음과 같이:
//获取已发布的100条文章 - 并预加载文章对应作者 $posts = Post::with('author')->limit(100)->get();//2次查询 $authors = array_map(function($post) { // 对作者模型生成查询 return $post->author->name;//这里讲不在产生查询 }, $posts);
SQL 로깅을 활성화하면 위의 사전 로드가 두 개의 쿼리만 생성하는 것을 볼 수 있습니다:
select * from `posts` select * from `authors` where `authors`.`id` in (?, ?, ?, ?, ?) [1,2,3,4,5]
관련 모델이 여러 개 있는 경우 배열을 사용하여 로드할 수 있습니다.
$posts = App\Post::with(['author', 'comments'])->get();
다음 재정의합니다. 다음 관계
Post -> belongsTo -> Author //每个文章只属于一个用户 Author -> hasMany -> Post //每个用户拥有多个文章 Author -> hasOne -> Profile //每个用户只有一个简介
다음 상황을 고려해보세요. 게시된 기사 작성자의 개인 프로필을 가져옵니다.
//获取所有文章 - 并预加载文章对应作者 $posts = App\Post::with('author')->get();//两次查询 //根据每个 `作者` 获取其简介 $posts->map(function ($post) { //虽然我们直接通过$author = $post->author不会产生查询, //但当调用$author->profile时,每次都会产生一个新查询 return $post->author->profile; });
위 AppPost::with('author')->get()
에 100개의 레코드가 있다고 가정하면 몇 개의 쿼리가 생성되나요?
즉시 로딩을 최적화하면 중첩 관계에서 추가 쿼리를 피할 수 있습니다.
//获取所有文章 - 并预加载文章对应作者及每个作者对应de profile $posts = App\Post::with('author.profile')->get();//三次查询 $posts->map(function ($post) { //不在产生新查询 return $post->author->profile; });
SQL 로그를 열어 해당하는 세 가지 쿼리를 확인할 수 있습니다.
select * from `posts` select * from `authors` where `authors`.`id` in (?, ?, ?, ?, ?) [.....] select * from `profiles` where `profiles`.`author_id` in (?, ?, ?, ?, ?) [.....]
Lazy loading
때로는 조건에 따라 관련 모델을 수집해야 할 수도 있습니다. 이 경우 관련 데이터에 대해 다른 쿼리를 느리게 호출할 수 있습니다.
$posts = App\Post::all();//一次查询 $posts->load('author.profile');//两次查询 $posts->map(function ($post) { //不在产生新查询 return $post->author->profile; });
SQL 로그를 보면 총 3개의 쿼리가 표시되지만 $posts->load()가 호출될 때만 표시됩니다.
결론
모델 로딩에 대해 더 많이 알고 더 깊은 수준에서 작동하는 방식을 이해하길 바랍니다. Laravel과 관련된 문서는 이미 매우 포괄적입니다. 추가적인 실습을 통해 관계형 쿼리를 최적화하는 데 더욱 자신감을 가질 수 있기를 바랍니다.
요약
원문은 eloquent-eager-loading을 번역하여 데이터 구성의 이전 부분을 단순화합니다.
관련 권장 사항:
Laravel의 비동기 프로세스 실행을 위한 관리자 구현 방법에 대한 자세한 설명
위 내용은 Laravel이 사전 로딩을 통해 모델 쿼리를 최적화하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

PHP는 동적 웹 개발 및 서버 측 응용 프로그램에 사용되는 서버 측 스크립팅 언어입니다. 1.PHP는 편집이 필요하지 않으며 빠른 발전에 적합한 해석 된 언어입니다. 2. PHP 코드는 HTML에 포함되어 웹 페이지를 쉽게 개발할 수 있습니다. 3. PHP는 서버 측 로직을 처리하고 HTML 출력을 생성하며 사용자 상호 작용 및 데이터 처리를 지원합니다. 4. PHP는 데이터베이스와 상호 작용하고 프로세스 양식 제출 및 서버 측 작업을 실행할 수 있습니다.

PHP는 지난 수십 년 동안 네트워크를 형성했으며 웹 개발에서 계속 중요한 역할을 할 것입니다. 1) PHP는 1994 년에 시작되었으며 MySQL과의 원활한 통합으로 인해 개발자에게 최초의 선택이되었습니다. 2) 핵심 기능에는 동적 컨텐츠 생성 및 데이터베이스와의 통합이 포함되며 웹 사이트를 실시간으로 업데이트하고 맞춤형 방식으로 표시 할 수 있습니다. 3) PHP의 광범위한 응용 및 생태계는 장기적인 영향을 미쳤지 만 버전 업데이트 및 보안 문제에 직면 해 있습니다. 4) PHP7의 출시와 같은 최근 몇 년간의 성능 향상을 통해 현대 언어와 경쟁 할 수 있습니다. 5) 앞으로 PHP는 컨테이너화 및 마이크로 서비스와 같은 새로운 도전을 다루어야하지만 유연성과 활발한 커뮤니티로 인해 적응력이 있습니다.

PHP의 핵심 이점에는 학습 용이성, 강력한 웹 개발 지원, 풍부한 라이브러리 및 프레임 워크, 고성능 및 확장 성, 크로스 플랫폼 호환성 및 비용 효율성이 포함됩니다. 1) 배우고 사용하기 쉽고 초보자에게 적합합니다. 2) 웹 서버와 우수한 통합 및 여러 데이터베이스를 지원합니다. 3) Laravel과 같은 강력한 프레임 워크가 있습니다. 4) 최적화를 통해 고성능을 달성 할 수 있습니다. 5) 여러 운영 체제 지원; 6) 개발 비용을 줄이기위한 오픈 소스.

PHP는 죽지 않았습니다. 1) PHP 커뮤니티는 성능 및 보안 문제를 적극적으로 해결하고 PHP7.x는 성능을 향상시킵니다. 2) PHP는 최신 웹 개발에 적합하며 대규모 웹 사이트에서 널리 사용됩니다. 3) PHP는 배우기 쉽고 서버가 잘 수행되지만 유형 시스템은 정적 언어만큼 엄격하지 않습니다. 4) PHP는 컨텐츠 관리 및 전자 상거래 분야에서 여전히 중요하며 생태계는 계속 발전하고 있습니다. 5) Opcache 및 APC를 통해 성능을 최적화하고 OOP 및 설계 패턴을 사용하여 코드 품질을 향상시킵니다.

PHP와 Python에는 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구 사항에 따라 다릅니다. 1) PHP는 웹 개발, 배우기 쉽고 풍부한 커뮤니티 리소스에 적합하지만 구문은 현대적이지 않으며 성능과 보안에주의를 기울여야합니다. 2) Python은 간결한 구문과 배우기 쉬운 데이터 과학 및 기계 학습에 적합하지만 실행 속도 및 메모리 관리에는 병목 현상이 있습니다.

PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP는 MySQLI 및 PDO 확장 기능을 사용하여 데이터베이스 작업 및 서버 측 로직 프로세싱에서 상호 작용하고 세션 관리와 같은 기능을 통해 서버 측로 로직을 처리합니다. 1) MySQLI 또는 PDO를 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하십시오. 2) 세션 관리 및 기타 기능을 통해 HTTP 요청 및 사용자 상태를 처리합니다. 3) 트랜잭션을 사용하여 데이터베이스 작업의 원자력을 보장하십시오. 4) SQL 주입 방지, 디버깅을 위해 예외 처리 및 폐쇄 연결을 사용하십시오. 5) 인덱싱 및 캐시를 통해 성능을 최적화하고, 읽을 수있는 코드를 작성하고, 오류 처리를 수행하십시오.

PHP에서 전처리 문과 PDO를 사용하면 SQL 주입 공격을 효과적으로 방지 할 수 있습니다. 1) PDO를 사용하여 데이터베이스에 연결하고 오류 모드를 설정하십시오. 2) 준비 방법을 통해 전처리 명세서를 작성하고 자리 표시자를 사용하여 데이터를 전달하고 방법을 실행하십시오. 3) 쿼리 결과를 처리하고 코드의 보안 및 성능을 보장합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.
