Trình tạo truy vấn có nhanh hơn Eloquent không?

Với logic tương tự, anh ấy cũng có thể tạo toàn bộ trang web bằng PHP thủ tục thuần túy và mọi thứ sẽ chạy nhanh hơn rất nhiều. Nhưng Eloquent cũng có cùng lý do với các framework PHP như Laravel. bảo mật, dễ sử dụng và khả năng bảo trì

Ngoài ra, với Eloquent và DB. thô, bạn có thể làm bất cứ điều gì bạn muốn

$foo = Foo::orderByRaw('DATEDIFF(date_begin, NOW())');
$bar = Bar::select(['bar.*', 'p.date_begin'])
	->from( DB::raw("bar, ({$foo->toSql()}) p") )
	->get();

Eloquent là một giải pháp tốt để xử lý một thực thể đơn lẻ theo cách CRUD — nghĩa là tạo một thực thể mới với các thuộc tính được điền và sau đó lưu nó vào cơ sở dữ liệu, tải bản ghi từ cơ sở dữ liệu hoặc xóa

Bạn sẽ được hưởng lợi rất nhiều từ các tính năng của Eloquent như kiểm tra bẩn (chỉ gửi SQL UPDATE cho các trường đã được thay đổi), các sự kiện mô hình (e. g. để gửi thông báo quản trị hoặc cập nhật bộ đếm thống kê khi ai đó đã tạo tài khoản mới), đặc điểm (dấu thời gian, xóa mềm, đặc điểm tùy chỉnh của bạn) háo hức/lười tải, v.v. Bạn cũng có thể áp dụng mẫu hướng miền và triển khai một số phần logic nghiệp vụ trong các thực thể Bản ghi Hoạt động của mình, ví dụ: xác thực, quản lý quan hệ, tính toán, v.v.

Tuy nhiên, như bạn đã biết, Eloquent đi kèm với một số mức giá hiệu suất. Khi bạn xử lý một bản ghi hoặc một vài bản ghi, không có gì phải lo lắng. Nhưng đối với trường hợp bạn đọc nhiều bản ghi (e. g. cho lưới dữ liệu, báo cáo, xử lý hàng loạt, v.v. ) các phương thức Laravel DB đơn giản là một cách tiếp cận tốt hơn. Đối với các ứng dụng dựa trên Laravel của chúng tôi, chúng tôi đang sử dụng cả hai cách tiếp cận khi chúng tôi thấy phù hợp. Chúng ta nên sử dụng biểu mẫu Eloquent cho giao diện người dùng của Laravel để xử lý một bản ghi duy nhất và sử dụng các phương thức DB để truy xuất dữ liệu cho các bảng giao diện người dùng, tác vụ xuất, v.v. Nó cũng hoạt động tốt với các API RESTful — Eloquent cho GET, PUT, POST, DELETE bằng một khóa và DB cho GET không có khóa nhưng có bộ lọc, sắp xếp và phân trang

Tại sao Laravel Eloquent

Thực hiện truy vấn theo cách OOP.
Không ràng buộc với lược đồ bảng. tôi. e. Ngay cả khi bạn thay đổi tên bảng của mình, không cần phải chạm vào một truy vấn (có thể có 1000 truy vấn) để bảng hoạt động. Chỉ cần thay đổi tên bảng trong mô hình hùng biện.
Mối quan hệ giữa các bảng có thể được duy trì một cách tao nhã. Chỉ cần đề cập đến loại mối quan hệ, không có gì khác (THAM GIA, THAM GIA TRÁI, THAM GIA PHẢI, v.v. ) cần thiết trong truy vấn nữa để lấy dữ liệu của các bảng liên quan.
Các truy vấn rất dễ đọc khi được viết bằng Eloquent so với Trình tạo truy vấn.

Các bảng cơ sở dữ liệu thường liên quan đến nhau. Ví dụ: một bài đăng trên blog có thể có nhiều bình luận hoặc một đơn đặt hàng có thể liên quan đến người dùng đã đặt nó. Eloquent giúp việc quản lý và làm việc với các mối quan hệ này trở nên dễ dàng. (Từ Tài liệu chính thức của Laravel. )

Trước khi bạn đi… Cảm ơn đã đọc bài viết. Nếu bạn thích nó, xin đừng quên thể hiện sự đánh giá cao của bạn bằng cách nhấp vào 👏 bên dưới

Tôi viết về kinh nghiệm chuyên môn của mình với tư cách là nhà phát triển phần mềm tự học, vì vậy hãy nhấp vào nút theo dõi nếu điều này khiến bạn quan tâm

Xin chào, tôi không biết khi nào nên sử dụng hùng biện và khi nào nên sử dụng trình tạo truy vấn. Hoặc Chúng ta có thể sử dụng chúng thay thế cho nhau không? . Bạn nghĩ gì về chủ đề này?

Một ứng dụng web luôn cần tương tác với cơ sở dữ liệu và Laravel làm cho nhiệm vụ này trở nên đơn giản. Một vài công cụ làm cho Laravel trở thành một framework tuyệt vời là việc bao gồm “Query Builder và Eloquent ORM”. Thông qua blog này, tôi dự định chia sẻ một số gợi ý nhanh về các khái niệm này

Trình tạo truy vấn

Trong Laravel, trình tạo truy vấn cơ sở dữ liệu cung cấp một giao diện dễ dàng để tạo và chạy các truy vấn cơ sở dữ liệu. Nó có thể được sử dụng để thực hiện tất cả các hoạt động cơ sở dữ liệu trong ứng dụng của bạn, từ Kết nối DB cơ bản, CRUD, Tập hợp, v.v. và nó hoạt động trên tất cả các hệ thống cơ sở dữ liệu được hỗ trợ như một nhà vô địch

Yếu tố đáng chú ý về trình tạo truy vấn là vì nó sử dụng Đối tượng dữ liệu PHP (PDO), nên chúng ta không cần lo lắng về các cuộc tấn công SQL injection (Hãy đảm bảo rằng chúng ta không vô tình loại bỏ lớp bảo vệ này). Chúng tôi có thể tránh tất cả các dòng mã đó để làm sạch dữ liệu trước khi đưa nó vào DB

Vì vậy, làm cách nào để tạo một truy vấn chọn đơn giản để tìm nạp tất cả các giá trị từ bảng người dùng?

$users = DB::table('users')->get();

ĐB. bảng chịu trách nhiệm bắt đầu một truy vấn trôi chảy đối với bảng cơ sở dữ liệu. Bảng mà từ đó giá trị phải được chọn được đề cập bên trong dấu ngoặc trong dấu ngoặc kép và cuối cùng phương thức get() nhận các giá trị. Tương tự để tìm nạp một hàng, chúng ta có thể sửa đổi đoạn mã trên bằng cách thêm mệnh đề where

$user = DB::table('users')->where('name', 'John')->first();

Ở đây, chúng tôi đang cố gắng tìm nạp một hàng có giá trị John trong cột tên của nó. Phương thức first() sẽ chỉ trả về kết quả tìm thấy đầu tiên. Điều gì sẽ xảy ra nếu chúng ta chỉ cần id người dùng của John. Thay vì trả về toàn bộ mảng kết quả, chúng ta có thể chỉ cần rút ra cột cụ thể đó?

$user_id = DB::table('users')->where('name', 'John')->pluck('id');

Để chỉ định nhiều hơn một cột, chúng ta có thể sử dụng mệnh đề select

$users = DB::table('users')->select('name', 'email')->get();

Bây giờ tôi tin rằng bạn đang nắm bắt được. Mọi thứ trở nên thú vị hơn ở phía dưới

Chúng tôi thường viết các truy vấn đối với một số 'điều kiện' nhất định. Vậy làm cách nào để tìm nạp danh sách người dùng có user_id nhỏ hơn 10?

$users = DB::table('users')->where(id, '<', 10)->get();

Có, chúng tôi chia toán tử và toán hạng thành ba tham số và đưa nó vào điều kiện where. Bây giờ chúng tôi có một tình huống, chúng tôi cần tìm nạp tất cả những người dùng có user_id nằm trong khoảng từ 10 đến 20

$users = DB::table('users')->whereBetween('id', array(10, 20))->get()

Laravel có các phương thức whereBetween(), whereNotBetween(), wherein() và whereNotIn() mà chúng ta có thể truyền các giá trị dưới dạng một mảng

Tại sao chúng ta chuyển các giá trị dưới dạng một mảng chứ không phải dưới dạng các tham số được phân tách bằng dấu phẩy?

Khi bắt đầu blog này, tôi đã đề cập đến các cuộc tấn công SQL injection. Giả sử rằng các giá trị 10 và 20 được lấy làm đầu vào của người dùng. Là lập trình viên, chúng tôi không thể tin tưởng những gì người dùng nhập vào trường đầu vào. Anh ta có thể là người dùng hợp lệ nhập giá trị đúng hoặc ai đó đang cố nhập giá trị sai và làm hỏng DB của bạn

$users = DB::table('users')->whereBetween('id', array($from, $to))->get()

Ở đây $from và $to là đầu vào của người dùng. Nếu chúng ta xem lớp kết nối cơ sở dữ liệu của Laravel để biết phương thức select() thì mảng này được bao quanh kết nối PDO và nó chịu trách nhiệm vệ sinh dữ liệu trước khi truy vấn được thực thi. Vì vậy, bạn có các truy vấn rõ ràng

Sử dụng Trình tạo truy vấn, chúng tôi cũng có thể viết các truy vấn SQL thô

________số 8

Ở đây $name được lấy từ đầu vào của người dùng. $name có thể chứa mã độc do đó chúng ta cần thay đổi đoạn mã trên để làm cho nó thân thiện với SQL

DB::select(DB::raw("SELECT * FROM `users` WHERE `name` = :username"), array('username' => $name));

Vì vậy, giá trị mảng khi được truyền qua kết nối PDO sẽ được khử trùng

ORM hùng hồn

Chúng tôi bắt đầu bằng cách trả lời một số câu hỏi

ORM là gì?

ORM hoặc Trình ánh xạ quan hệ đối tượng là một kỹ thuật để truy cập các đối tượng mà không cần phải xem xét các đối tượng đó có liên quan như thế nào với nguồn của chúng

Hùng biện là gì?

ORM có trong Laravel được gọi là Eloquent và nó cho phép chúng ta làm việc với các đối tượng cơ sở dữ liệu và các mối quan hệ bằng cách sử dụng một cú pháp biểu cảm. Nó tương tự như làm việc với các đối tượng trong PHP. Trong Laravel, mỗi bảng cơ sở dữ liệu có một “Model” tương ứng. Eloquent ORM cung cấp triển khai Active Record, nghĩa là mỗi mô hình chúng ta tạo trong cấu trúc MVC tương ứng với một bảng trong cơ sở dữ liệu của chúng ta

Tạo một Eloquent model tương tự như tạo một class. Tất cả các tệp mô hình phải nằm trong thư mục ứng dụng/mô hình

class Nhóm mở rộng Eloquent { }

Tất cả các mô hình Eloquent mở rộng từ lớp Eloquent. Tên viết thường, số nhiều của lớp sẽ được sử dụng làm tên bảng trừ khi một tên khác được chỉ định rõ ràng. Eloquent cũng sẽ giả định rằng mỗi bảng có một cột khóa chính có tên là “id” trừ khi được chỉ định. Chúng ta có thể chỉ định một bảng như sau

class Nhóm mở rộng Eloquent

$users = DB::table('users')->get();
0

Ở đây Group model sẽ tương ứng với bảng groups (mặc định). Chúng ta có thể truy cập dữ liệu trong bảng nhóm bằng các thao tác CRUD cơ bản

Theo mặc định, các mẫu Eloquent sẽ có các phím tăng tự động

Tạo ra

$user = DB::table('users')->where('name', 'John')->first();
0
$user = DB::table('users')->where('name', 'John')->first();
1

// Cố gắng truy xuất một mô hình bằng khóa chính nếu không sẽ ném một ngoại lệ

$user = DB::table('users')->where('name', 'John')->first();
2

Cập nhật

// Truy xuất và cập nhật

$user = DB::table('users')->where('name', 'John')->first();
3

// Sử dụng mệnh đề WHERE

$user = DB::table('users')->where('name', 'John')->first();
4

// Xóa một bản ghi

$user = DB::table('users')->where('name', 'John')->first();
5

// Xóa một số

$user = DB::table('users')->where('name', 'John')->first();
6

Có nhiều chủ đề hơn để trình bày trong Eloquent, hy vọng trong blog tiếp theo

Vì vậy, chúng tôi đã đi đến một kết thúc

Chúng ta đã thảo luận về trình tạo truy vấn của Laravel và cách nó giúp tương tác DB của chúng ta không gặp rắc rối. Chúng tôi đã viết một truy vấn chọn cơ bản, đã thấy một số cách để tìm nạp các giá trị tùy thuộc vào nhu cầu phát triển ứng dụng web của chúng tôi và cách tránh SQL injection trong khi viết các truy vấn SQL thô bằng trình tạo truy vấn. Tiếp theo, chúng tôi đã cố gắng nắm bắt về Eloquent ORM, cách tạo mô hình và một vài ví dụ nhanh về các thao tác CRUD. Tôi hy vọng những gợi ý nhanh này có thể mang lại lợi ích cho một số bạn và giúp bạn bắt đầu. Vui lòng gửi bình luận của bạn và cũng chỉ ra nếu có bất kỳ lỗi đánh máy nào

Khi nào nên sử dụng trình tạo truy vấn trong Laravel?

Trình xây dựng truy vấn cơ sở dữ liệu của Laravel cung cấp một giao diện thuận tiện, trôi chảy để tạo và chạy các truy vấn cơ sở dữ liệu. Nó có thể được sử dụng để thực hiện hầu hết các hoạt động cơ sở dữ liệu trong ứng dụng của bạn và hoạt động hoàn hảo với tất cả các hệ thống cơ sở dữ liệu được Laravel hỗ trợ.

Làm cách nào để tăng tốc truy vấn Laravel?

6 cách nhanh chóng và dễ dàng để tăng tốc trang web Laravel của bạn .
Chỉ tìm nạp các trường bạn cần trong truy vấn cơ sở dữ liệu của mình. .
Sử dụng tải háo hức bất cứ khi nào có thể. .
Loại bỏ bất kỳ gói không cần thiết hoặc không mong muốn. .
Bộ nhớ cache, bộ nhớ cache, bộ nhớ cache. .
Sử dụng phiên bản mới nhất của PHP. .
Tận dụng hàng đợi

Sự khác biệt giữa ORM và trình tạo truy vấn là gì?

ORM cung cấp hình thức trừu tượng cao nhất và ngăn ngừa lỗi chính tả không chỉ trong các từ khóa SQL mà còn trong tên bảng và tên cột. Chúng mất nhiều thời gian hơn để bắt đầu so với trình tạo truy vấn — cả từ góc độ đường cong học tập và từ góc độ chi phí phát triển ban đầu.

Tại sao chúng ta sử dụng Eloquent trong Laravel?

Eloquent hỗ trợ nhiệm vụ tương tác với các bảng cơ sở dữ liệu, cung cấp cách tiếp cận hướng đối tượng để chèn, cập nhật và xóa các bản ghi cơ sở dữ liệu, đồng thời cung cấp giao diện hợp lý để thực hiện các truy vấn SQL phức tạp