Home  >  Article  >  Backend Development  >  Laravel query builder Query Builder overlay chain call method tutorial

Laravel query builder Query Builder overlay chain call method tutorial

小云云
小云云Original
2017-12-13 10:02:542137browse

This article mainly introduces to you the relevant information about the query builder Query Builder superimposed chain call in laravel skills. The article introduces it in detail through the example code. It has certain reference learning value for everyone's study or work. I hope it can help. to everyone.

Introduction to query builder

Laravel query builder (query builder) provides a convenient and fluent interface for establishing and executing database search syntax

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

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

Introduction

Today I would like to 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. Students who don’t know 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 status and type may be used as qualifying conditions.

I wrote it like this at first


 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(); 
 }


##This code is really ugly, a lot of public code, 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();


Use variables to save the query constructor instance, and then superimpose constraints on it Condition, 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);


There is a caveat in this way of writing. Once you call where and other constraint methods 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


laravel documents Although this example is not written here, it is mentioned:

You can use the table method of the DB facade to start the query. The 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.


Related recommendations:

Recommended 7 articles about query constructors

Laravel learning-database operations and query construction Sample code sharing of the builder

ThinkPHP5’s query constructor working principle

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

Statement:
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