Home Backend Development PHP Tutorial Laravel skills: Query Builder overlay chain call method explanation

Laravel skills: Query Builder overlay chain call method explanation

Jul 06, 2018 pm 05:36 PM
laravel

This article mainly introduces you to the relevant information about the query builder Query Builder overlay chain call in laravel skills. The article introduces it in detail through the example code, which has certain reference learning value for everyone's study or work. Friends who need it can come and take a look below.

Introduction to Query Builder

Laravel query builder (query builder) provides a convenient and fluent interface for establishing and executing database searches. Syntax

Use PDO parameter binding to protect the application from SQL injection. Therefore, the incoming parameters do not need to escape special characters

Basically, all database operations can be satisfied, and can be executed on all supported database systems

Introduction

Today I will introduce to you a little trick of laravel query constructor. It is not mentioned in detail in the official document examples. It is not a high-end skill. Many people may be using it. No. Students who know it can take a look.

In business code, queries are often made based on different conditions. For a simple example, we now want to query the user list, arranged in reverse chronological order, and there may be status and type as qualifying conditions.

This is how I wrote it at the beginning

 if($status && $type) {
 $users = User::where('status', $status)->where('type', $type)->latest()->get();
 } else if ($status) {
 $users = User::where('status', $status)->latest()->get(); 
 } else if ($type) {
 $users = User::where('status', $type)->latest()->get();
 } else {
 $users = User::latest()->get(); 
 }
Copy after login

This code is really ugly, there are many common codes, such as ->latest() ->get(), written four times. If the product says that today we want to sort it in order, then you have to change four places. Although it is quick to change it with the help of an editor, you must know that this is only the simplest example.

After reading the document, there is a when method for conditional judgment. A bunch of closures are not ideal. I firmly believed that there must be a more elegant way of writing, so I searched on stackoverflow, and sure enough, the almighty Waiguoren gave me the answer.

Improved writing method:

 $query = User::query();
 // 如果用DB: $query = DB::table('user'); 
 if ($status) {
  $query->where('status', $status);
 }
 if ($type) {
  $query->where('type', $type);
 } 
 $users = $query->latest()->get();
Copy after login

Use variables to save the query constructor instance, then superimpose constraints on it, and finally get the collection. The public part is placed at the beginning and end, and the structure is clear. Is it a judgment call?

And we can also pass $query as a parameter into a method or function, encapsulating common logic together to facilitate multiple calls:

 function foo($query) {
  $query->with(['girl', 'gay'])
    ->latest()
    ->get();
 } 
 $query = User::query();
 $users = foo($query);
Copy after login

There is a caveat in this way of writing. Once you call a constraint method such as where on $query, the query will be changed. Sometimes we need to clone a query in advance.

For example, for example, we want to get users of type 1 and 2 at the same time

 $query_1 = User::query();
 $query_2 = clone $query_1; 
 $users_1 = $query_1->where('type', 1)->latest()->get();
 $users_2 = $query_2->where('type', 2)->latest()->get();
 // 错误 $users_2 = $query_1->where('type', 1)->latest()->get();
 // 这样写得到得是type = 1 and $type = 2
Copy after login

Although this is not written in the laravel document Example, but mentioned:

You can use the table method of the DB facade to start the query. This table method returns a query builder instance for the query table, allowing you to chain more constraints when querying, and use the get method to obtain the final result

Digression

Previous I heard some seniors say that they don’t want programmers who only know Baidu. At that time, I felt really pretentious, not all search engines, because I didn’t use Google at that time. Now I don’t want to work with someone who only knows Baidu. Baidu is just an advertising search, and all the search results are nonsense.

Google and stackoverflow are really good things. Many of them have rich knowledge and professional answers. From computer history to operating systems, databases, and various programming languages, they have helped me debug a lot of bugs. Is it bad to advertise like this in segmentfault? Get away!

Summary

Reference:

  1. How to create multiple where clause query using Laravel Eloquent? - stackoverflow

  2. Model::query - laravelAPI

##Articles you may be interested in:

Sharing of PHP code to implement Fibonacci sequence

Example explanation of PHP implementation of array search function based on dichotomy

Detailed explanation of classes and objects in php

The above is the detailed content of Laravel skills: Query Builder overlay chain call method explanation. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to get the return code when email sending fails in Laravel? How to get the return code when email sending fails in Laravel? Apr 01, 2025 pm 02:45 PM

Method for obtaining the return code when Laravel email sending fails. When using Laravel to develop applications, you often encounter situations where you need to send verification codes. And in reality...

Laravel schedule task is not executed: What should I do if the task is not running after schedule: run command? Laravel schedule task is not executed: What should I do if the task is not running after schedule: run command? Mar 31, 2025 pm 11:24 PM

Laravel schedule task run unresponsive troubleshooting When using Laravel's schedule task scheduling, many developers will encounter this problem: schedule:run...

In Laravel, how to deal with the situation where verification codes are failed to be sent by email? In Laravel, how to deal with the situation where verification codes are failed to be sent by email? Mar 31, 2025 pm 11:48 PM

The method of handling Laravel's email failure to send verification code is to use Laravel...

How to implement the custom table function of clicking to add data in dcat admin? How to implement the custom table function of clicking to add data in dcat admin? Apr 01, 2025 am 07:09 AM

How to implement the table function of custom click to add data in dcatadmin (laravel-admin) When using dcat...

Laravel Redis connection sharing: Why does the select method affect other connections? Laravel Redis connection sharing: Why does the select method affect other connections? Apr 01, 2025 am 07:45 AM

The impact of sharing of Redis connections in Laravel framework and select methods When using Laravel framework and Redis, developers may encounter a problem: through configuration...

Laravel multi-tenant extension stancl/tenancy: How to customize the host address of a tenant database connection? Laravel multi-tenant extension stancl/tenancy: How to customize the host address of a tenant database connection? Apr 01, 2025 am 09:09 AM

Custom tenant database connection in Laravel multi-tenant extension package stancl/tenancy When building multi-tenant applications using Laravel multi-tenant extension package stancl/tenancy,...

Laravel Eloquent ORM in Bangla partial model search) Laravel Eloquent ORM in Bangla partial model search) Apr 08, 2025 pm 02:06 PM

LaravelEloquent Model Retrieval: Easily obtaining database data EloquentORM provides a concise and easy-to-understand way to operate the database. This article will introduce various Eloquent model search techniques in detail to help you obtain data from the database efficiently. 1. Get all records. Use the all() method to get all records in the database table: useApp\Models\Post;$posts=Post::all(); This will return a collection. You can access data using foreach loop or other collection methods: foreach($postsas$post){echo$post->

Laravel database migration encounters duplicate class definition: How to resolve duplicate generation of migration files and class name conflicts? Laravel database migration encounters duplicate class definition: How to resolve duplicate generation of migration files and class name conflicts? Apr 01, 2025 pm 12:21 PM

A problem of duplicate class definition during Laravel database migration occurs. When using the Laravel framework for database migration, developers may encounter "classes have been used...

See all articles