Laravel thuộc về nhiều người có điều kiện

Eloquent ORM đi kèm với Laravel cung cấp cho bạn một cách dễ dàng để tương tác với cơ sở dữ liệu của bạn. Điều này đơn giản hóa tất cả các hoạt động CRUD (Tạo, đọc, cập nhật và xóa) và bất kỳ truy vấn cơ sở dữ liệu nào khác

Trong khi xây dựng truy vấn Laravel của bạn cho dù sử dụng Eloquent Query hay DB Query builder, bạn thường phải sử dụng nhiều điều kiện where

Laravel cung cấp các phương thức xây dựng truy vấn và hùng biện đơn giản để truy vấn vào cơ sở dữ liệu. Phương thức where() là mệnh đề cơ bản để truy vấn vào cơ sở dữ liệu. Chúng tôi gần như cần mệnh đề where trong mọi truy vấn

Xuyên suốt hướng dẫn, bạn sẽ học cách sử dụng nhiều điều kiện where trong Laravel eloquent và query builder. Bạn có thể sử dụng nhiều điều kiện để lọc nhiều cột vào cơ sở dữ liệu

Laravel bội số nơi có điều kiện — [VÀ]

Theo mặc định, khi các điều kiện được xâu chuỗi với toán tử AND. Để tham gia thông qua toán tử OR, bạn sẽ phải sử dụng orWhere mà chúng ta sẽ nói tiếp theo

1) Cú pháp đơn giản

...{{ADD_HERE}}
->where('column','operator','value')
->where('column','operator','value')
...

Ví dụ

Hãy tìm người dùng có tên = “John Doe” và email = “john@example. com”

$user = User::where('name','John Doe')->where('email','[email protected]')->first();

2) Cú pháp mảng

...
->where([
['column','operator','value'],
['column','operator','value'],
])
...

Ví dụ

Hãy tạo lại ví dụ trên của chúng tôi ở dạng được nhóm

$user = User::where([
['name','John Doe'],
['email','[email protected]']
])->first();
Laravel bội số khi có điều kiện — [HOẶC]

Trong trường hợp bạn muốn các mệnh đề của mình được nối với

...
->where([
['column','operator','value'],
['column','operator','value'],
])
...
5 thay vì
...
->where([
['column','operator','value'],
['column','operator','value'],
])
...
6, bạn có thể sử dụng phương pháp
$user = User::where('name','John Doe')->where('email','[email protected]')->first();
0

cú pháp

...
->where('column','operator','value')
->orWhere('column','operator','value')
...

Ví dụ

$user = User::where('email','[email protected]')->orWhere('email','[email protected]')->first();

Ví dụ trên có nghĩa là - Tìm cho tôi người dùng đầu tiên có email là 'jdoe@example. com’ hoặc ‘jhon@example. com’

Nhóm Nhiều AND-OR-AND khi có điều kiện

Nếu bạn muốn nhóm nhiều điều kiện AND, OR & AND trong truy vấn của mình thì sao?

Bạn không thể xâu chuỗi trực tiếp nhiều điều kiện AND-OR-AND lại với nhau. Ghi nhớ — Trong SQL, bạn sẽ phải sử dụng dấu ngoặc đơn nếu muốn nhóm các điều kiện như vậy

cú pháp

...
->where(function($query) {
$query->where('column','operator','value')
->orWhere('column','operator','value');
})
...

Ở trên, bạn có thể thấy rằng tôi đã chuyển một hàm đóng trong điều kiện where() bên ngoài — Nó gói gọn các điều kiện bên trong trong dấu ngoặc đơn

Ví dụ

________số 8

Ghi chú. Bạn cũng có thể lồng nhiều bao đóng mặc dù hãy đảm bảo các tên biến khác nhau cho mỗi bao đóng

thu hồi nhanh

Khi truy cập các mối quan hệ Eloquent dưới dạng thuộc tính, các mô hình liên quan được "tải chậm". Điều này có nghĩa là dữ liệu mối quan hệ không thực sự được tải cho đến khi bạn truy cập thuộc tính lần đầu tiên. Tuy nhiên, Eloquent có thể "eager load" các mối quan hệ tại thời điểm bạn truy vấn model gốc. Tải háo hức làm giảm bớt vấn đề truy vấn "N+1". Để minh họa vấn đề truy vấn *N+1 *, hãy xem xét mô hình Sách "thuộc về" mô hình Tác giả


namespace App;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
 /**
 * Get the author that wrote the book.
 */
 public function author()
 {
 return $this->belongsTo(Author::class);
 }
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Chúng tôi có thể sử dụng tải háo hức để giảm thao tác này xuống chỉ còn hai truy vấn. Khi xây dựng truy vấn, bạn có thể chỉ định mối quan hệ nào sẽ được tải háo hức bằng phương thức with()

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
0

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Kết quả truy vấn

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
1

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Khi truy xuất các bản ghi mô hình, bạn có thể muốn giới hạn kết quả của mình dựa trên sự tồn tại của một mối quan hệ. Ví dụ: hãy tưởng tượng bạn muốn truy xuất tất cả các tác giả có tên sách bắt đầu bằng PHP. Để làm như vậy, bạn có thể chuyển tên của mối quan hệ cho phương thức whereHas() và xác định các ràng buộc truy vấn bổ sung cho truy vấn has của bạn

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
2

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Kết quả truy vấn

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
3

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Khi truy vấn này được thực thi, bạn sẽ nhận được tất cả các tác giả có ít nhất một cuốn sách bắt đầu bằng PHP, đúng không? .
Bây giờ, nếu bạn duyệt qua các tác giả và truy cập vào mối quan hệ sách như vậy,

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
4

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bạn sẽ kết thúc với N+1, và để giải nó chắc chắn bạn sẽ sử dụng phương thức with() để háo hức tải sách

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
5

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Kết quả truy vấn

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
6

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Cho đến nay, chúng ta đã giải quyết được N+1 vấn đề, nhưng CHỜ bạn có nhận thấy điều gì đó không, đúng vậy, truy vấn thứ 2 chỉ nhận tất cả sách từ các tác giả đã chọn từ truy vấn đầu tiên, phải không? .
Truy vấn đầu tiên của chúng tôi đã thực hiện công việc của nó và chỉ cho chúng tôi những tác giả có sách bắt đầu bằng PHP, nhưng truy vấn thứ 2 (tải háo hức) sẽ cho chúng tôi tất cả sách của từng tác giả, điều đó có nghĩa là nếu tôi lặp lại .

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
7

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

để có được kết quả giống như chúng ta muốn từ đâu, chúng ta cần sử dụng cùng một truy vấn điều kiện bên trong phương thức with()

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
8

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Kết quả truy vấn

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
00

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Tôi nghĩ bạn đã nhận thấy truy vấn thứ 2 có cùng điều kiện với truy vấn thứ nhất.
Bây giờ, đây là những kết quả mà chúng tôi đang tìm kiếm.

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
01

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

 - - - - - - 
Cuối cùng, thực hiện truy vấn này trên tất cả các vị trí và lặp lại các điều kiện giống nhau, rất cồng kềnh, vì vậy chúng tôi sẽ sử dụng phạm vi cục bộ trong mô hình Tác giả

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
02

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bây giờ, mã của chúng tôi sạch hơn nhiều bằng cách gọi nó theo cách này

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
03

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Kết quả truy vấn

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
00

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Vì trình tạo truy vấn này có thể cần thiết trong nhiều Mô hình, chúng tôi sẽ tạo một macro cho nó để tất cả các Mô hình sẽ có phạm vi đó, tất cả những gì bạn cần là thêm đoạn mã này vào *AppServiceProvider. khởi động() *

$user = User::where('name','John Doe')->where('email','[email protected]')->first();
05

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Chà, bạn đã đi đến cuối chủ đề này, tôi hy vọng mọi thứ đã rõ ràng và nếu bạn có bất kỳ suy nghĩ hoặc ý tưởng tương tự nào, tôi sẽ rất vui nếu bạn chia sẻ chúng với chúng tôi.
Cảm ơn

Làm cách nào để tìm nạp dữ liệu trong mối quan hệ một đến nhiều trong laravel?

Truy xuất từ ​​một đến nhiều dữ liệu về mối quan hệ . tìm(1); . Tương tự, chúng ta có thể truy xuất mô hình liên quan nghịch đảo. $brand = Brand::find(1); $products = $brand->products; When we try to get products for a brand, Laravel will look into products table with the brand ID in the brand_id columns and grab all the products matching with this ID. Similarly, we can retrieve the inverse related model.

Điều gì có nhiều thông qua trong laravel?

Eloquent Relationships là một trong những tính năng hữu ích và mạnh mẽ nhất của Laravel Framework. Đó là một trong những lý do tại sao tôi thích Laravel nhất. Về cơ bản, nó giúp chúng tôi tìm nạp hoặc chèn dữ liệu một cách rất dễ dàng và hiệu quả.

Mối quan hệ đa hình trong laravel là gì?

Mối quan hệ đa hình một đối một là tình huống trong đó một mô hình có thể thuộc về nhiều loại mô hình nhưng chỉ thuộc về một liên kết. A typical example of this is featured images on a post and an avatar for a user. The only thing that changes however is how we get the associated model by using morphOne instead.

Làm cách nào để tạo mối quan hệ nhiều-nhiều trong laravel?

Làm cách nào để triển khai nhiều mối quan hệ trong Laravel? .
Tạo một dự án Laravel. Bước đầu tiên sẽ là tạo một dự án Laravel. .
Tạo một mô hình và di chuyển. .
Tạo một bảng tổng hợp. .
Xác định nhiều mối quan hệ. .
Sử dụng Mối quan hệ Nhiều đến Nhiều trong Bộ điều khiển của chúng tôi. .
Truy xuất hồ sơ