Trước hết, trước khi đăng bất kỳ chủ đề nào, vui lòng xem bản xem trước của chủ đề, vì rất khó để tìm ra vấn đề. Dung dịch. Bạn cần háo hức tải mối quan hệ và lấy dữ liệu từ thuộc tính mối quan hệ chứ không phải id
$rapports = Rapport::with['Rapport']->all[];
và theo quan điểm của bạn, bạn có thể truy cập nó như
{{$rapport->Rapport->nom}}
Một gợi ý nữa mà tôi muốn đưa ra cho bạn là, bạn nên nghịch đảo tên của các hàm quan hệ
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 làm cho 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 và hỗ trợ nhiều loại mối quan hệ phổ biến
Xác định mối quan hệ
Các mối quan hệ Eloquent được định nghĩa là các phương thức trên các lớp mô hình Eloquent của bạn. Vì các mối quan hệ cũng đóng vai trò là trình tạo truy vấn mạnh mẽ, nên việc xác định các mối quan hệ dưới dạng phương thức cung cấp khả năng truy vấn và xâu chuỗi phương thức mạnh mẽ. Ví dụ: chúng tôi có thể xâu chuỗi các ràng buộc truy vấn bổ sung trên mối quan hệ
hasOne[Phone::class];
}
}
39 này$user->posts[]->where['active', 1]->get[];
Tuy nhiên, trước khi đi sâu vào việc sử dụng các mối quan hệ, hãy tìm hiểu cách xác định từng loại mối quan hệ được hỗ trợ bởi Eloquent
Một Đối Một
Mối quan hệ một đối một là một kiểu quan hệ cơ sở dữ liệu rất cơ bản. Ví dụ: một mô hình
hasOne[Phone::class];
}
}
40 có thể được liên kết với một mô hình hasOne[Phone::class];
}
}
41. Để xác định mối quan hệ này, chúng tôi sẽ đặt một phương thức hasOne[Phone::class];
}
}
42 trên mô hình hasOne[Phone::class];
}
}
40. Phương thức hasOne[Phone::class];
}
}
42 nên gọi phương thức hasOne[Phone::class];
}
}
45 và trả về kết quả của nó. Phương thức hasOne[Phone::class];
}
}
45 có sẵn cho mô hình của bạn thông qua lớp cơ sở hasOne[Phone::class];
}
}
47 của mô hìnhhasOne[Phone::class];
}
}
Đối số đầu tiên được truyền cho phương thức
hasOne[Phone::class];
}
}
45 là tên của lớp mô hình liên quan. Khi mối quan hệ được xác định, chúng tôi có thể truy xuất bản ghi liên quan bằng các thuộc tính động của Eloquent. Các thuộc tính động cho phép bạn truy cập các phương thức quan hệ như thể chúng là các thuộc tính được xác định trên mô hình{{$rapport->Rapport->nom}}
4Eloquent xác định khóa ngoại của quan hệ dựa trên tên model gốc. Trong trường hợp này, mô hình
hasOne[Phone::class];
}
}
41 tự động được coi là có khóa ngoại hasOne[Phone::class];
}
}
50. Nếu bạn muốn ghi đè quy ước này, bạn có thể chuyển đối số thứ hai cho phương thức hasOne[Phone::class];
}
}
45{{$rapport->Rapport->nom}}
8Ngoài ra, Eloquent giả định rằng khóa ngoại phải có giá trị khớp với cột khóa chính của khóa gốc. Nói cách khác, Eloquent sẽ tìm kiếm giá trị của cột
hasOne[Phone::class];
}
}
52 của người dùng trong cột hasOne[Phone::class];
}
}
50 của bản ghi hasOne[Phone::class];
}
}
41. Nếu bạn muốn mối quan hệ sử dụng giá trị khóa chính khác với hasOne[Phone::class];
}
}
52 hoặc thuộc tính hasOne[Phone::class];
}
}
56 của mô hình của bạn, bạn có thể chuyển đối số thứ ba cho phương thức hasOne[Phone::class];
}
}
45hasOne[Phone::class];
}
}
5Xác định nghịch đảo của mối quan hệ
Vì vậy, chúng tôi có thể truy cập mô hình
hasOne[Phone::class];
}
}
41 từ mô hình hasOne[Phone::class];
}
}
40 của chúng tôi. Tiếp theo, hãy xác định mối quan hệ trên mô hình hasOne[Phone::class];
}
}
41 sẽ cho phép chúng tôi truy cập người dùng sở hữu điện thoại. Chúng ta có thể định nghĩa nghịch đảo của mối quan hệ hasOne[Phone::class];
}
}
45 bằng phương pháp hasOne[Phone::class];
}
}
62$user->posts[]->where['active', 1]->get[];
1Khi gọi phương thức
hasOne[Phone::class];
}
}
63, Eloquent sẽ cố gắng tìm một mô hình hasOne[Phone::class];
}
}
40 có một hasOne[Phone::class];
}
}
52 khớp với cột hasOne[Phone::class];
}
}
50 trên mô hình hasOne[Phone::class];
}
}
41Eloquent xác định tên khóa ngoại bằng cách kiểm tra tên của phương thức quan hệ và thêm hậu tố tên phương thức là
hasOne[Phone::class];
}
}
68. Vì vậy, trong trường hợp này, Eloquent giả định rằng mô hình hasOne[Phone::class];
}
}
41 có cột hasOne[Phone::class];
}
}
50. Tuy nhiên, nếu khóa ngoại trên mô hình hasOne[Phone::class];
}
}
41 không phải là hasOne[Phone::class];
}
}
50, bạn có thể chuyển tên khóa tùy chỉnh làm đối số thứ hai cho phương thức hasOne[Phone::class];
}
}
62hasOne[Phone::class];
}
}
3Nếu mô hình gốc không sử dụng
hasOne[Phone::class];
}
}
52 làm khóa chính hoặc bạn muốn tìm mô hình được liên kết bằng một cột khác, bạn có thể chuyển đối số thứ ba cho phương thức hasOne[Phone::class];
}
}
62 chỉ định khóa tùy chỉnh của bảng chahasOne[Phone::class];
}
}
6một đến nhiều
Mối quan hệ một-nhiều được sử dụng để xác định các mối quan hệ trong đó một mô hình đơn lẻ là cha của một hoặc nhiều mô hình con. Ví dụ: một bài đăng trên blog có thể có vô số bình luận. Giống như tất cả các mối quan hệ Eloquent khác, mối quan hệ một-nhiều được xác định bằng cách xác định một phương thức trên mô hình Eloquent của bạn
hasOne[Phone::class];
}
}
7Hãy nhớ rằng, Eloquent sẽ tự động xác định cột khóa ngoại thích hợp cho mô hình
hasOne[Phone::class];
}
}
76. Theo quy ước, Eloquent sẽ lấy tên "snake case" của model gốc và thêm vào hậu tố là hasOne[Phone::class];
}
}
68. Vì vậy, trong ví dụ này, Eloquent sẽ giả sử cột khóa ngoại trên mô hình hasOne[Phone::class];
}
}
76 là hasOne[Phone::class];
}
}
79Khi phương thức quan hệ đã được xác định, chúng ta có thể truy cập vào bộ sưu tập các nhận xét có liên quan bằng cách truy cập thuộc tính
hasOne[Phone::class];
}
}
80. Hãy nhớ rằng, vì Eloquent cung cấp "các thuộc tính quan hệ động", nên chúng ta có thể truy cập các phương thức quan hệ như thể chúng được định nghĩa là các thuộc tính trên modelhasOne[Phone::class];
}
}
3Vì tất cả các mối quan hệ cũng đóng vai trò là trình tạo truy vấn, nên bạn có thể thêm các ràng buộc khác vào truy vấn mối quan hệ bằng cách gọi phương thức
hasOne[Phone::class];
}
}
80 và tiếp tục xâu chuỗi các điều kiện vào truy vấnhasOne[Phone::class];
}
}
0Giống như phương thức
hasOne[Phone::class];
}
}
45, bạn cũng có thể ghi đè khóa ngoại và khóa cục bộ bằng cách chuyển các đối số bổ sung cho phương thức hasOne[Phone::class];
}
}
83hasOne[Phone::class];
}
}
1Một Đến Nhiều [Nghịch Đảo] / Thuộc Về
Bây giờ chúng ta có thể truy cập tất cả các bình luận của bài đăng, hãy xác định mối quan hệ để cho phép một bình luận truy cập bài đăng gốc của nó. Để xác định nghịch đảo của mối quan hệ
hasOne[Phone::class];
}
}
83, hãy xác định phương thức quan hệ trên mô hình con gọi phương thức hasOne[Phone::class];
}
}
62hasOne[Phone::class];
}
}
2Khi mối quan hệ đã được xác định, chúng tôi có thể truy xuất bài đăng gốc của nhận xét bằng cách truy cập "thuộc tính mối quan hệ động" của
hasOne[Phone::class];
}
}
86hasOne[Phone::class];
}
}
3Trong ví dụ trên, Eloquent sẽ cố gắng tìm một mô hình
hasOne[Phone::class];
}
}
87 có một hasOne[Phone::class];
}
}
52 khớp với cột hasOne[Phone::class];
}
}
79 trên mô hình hasOne[Phone::class];
}
}
76Eloquent xác định tên khóa ngoại mặc định bằng cách kiểm tra tên của phương thức quan hệ và thêm vào hậu tố tên phương thức một
hasOne[Phone::class];
}
}
91 theo sau là tên của cột khóa chính của mô hình gốc. Vì vậy, trong ví dụ này, Eloquent sẽ giả sử khóa ngoại của mô hình hasOne[Phone::class];
}
}
87 trên bảng hasOne[Phone::class];
}
}
80 là hasOne[Phone::class];
}
}
79Tuy nhiên, nếu khóa ngoại cho mối quan hệ của bạn không tuân theo các quy ước này, bạn có thể chuyển tên khóa ngoại tùy chỉnh làm đối số thứ hai cho phương thức
hasOne[Phone::class];
}
}
62hasOne[Phone::class];
}
}
4Nếu mô hình gốc của bạn không sử dụng
hasOne[Phone::class];
}
}
52 làm khóa chính hoặc bạn muốn tìm mô hình được liên kết bằng một cột khác, bạn có thể chuyển đối số thứ ba cho phương thức hasOne[Phone::class];
}
}
62 chỉ định khóa tùy chỉnh của bảng cha mẹ của bạnhasOne[Phone::class];
}
}
5Mô hình mặc định
Các mối quan hệ
hasOne[Phone::class];
}
}
62, hasOne[Phone::class];
}
}
45, {{$rapport->Rapport->nom}}
400 và {{$rapport->Rapport->nom}}
401 cho phép bạn xác định một mô hình mặc định sẽ được trả về nếu mối quan hệ đã cho là {{$rapport->Rapport->nom}}
402. Mẫu này thường được gọi là mẫu Đối tượng Null và có thể giúp loại bỏ các kiểm tra có điều kiện trong mã của bạn. Trong ví dụ sau, quan hệ hasOne[Phone::class];
}
}
63 sẽ trả về một mô hình {{$rapport->Rapport->nom}}
404 trống nếu không có người dùng nào được đính kèm vào mô hình hasOne[Phone::class];
}
}
87hasOne[Phone::class];
}
}
6Để điền các thuộc tính vào mô hình mặc định, bạn có thể truyền một mảng hoặc bao đóng cho phương thức
{{$rapport->Rapport->nom}}
406hasOne[Phone::class];
}
}
7Truy vấn thuộc về các mối quan hệ
Khi truy vấn các phần tử con của mối quan hệ "thuộc về", bạn có thể xây dựng mệnh đề
{{$rapport->Rapport->nom}}
407 theo cách thủ công để truy xuất các mô hình Eloquent tương ứnghasOne[Phone::class];
}
}
8Tuy nhiên, bạn có thể thấy thuận tiện hơn khi sử dụng phương pháp
{{$rapport->Rapport->nom}}
408, phương thức này sẽ tự động xác định mối quan hệ phù hợp và khóa ngoại cho mô hình đã chohasOne[Phone::class];
}
}
9Theo mặc định, Laravel sẽ xác định mối quan hệ được liên kết với mô hình đã cho dựa trên tên lớp của mô hình;
{{$rapport->Rapport->nom}}
40Có Một Trong Nhiều
Đôi khi một mô hình có thể có nhiều mô hình liên quan, nhưng bạn muốn dễ dàng truy xuất mô hình liên quan "mới nhất" hoặc "cũ nhất" của mối quan hệ. Ví dụ: một mô hình
hasOne[Phone::class];
}
}
40 có thể liên quan đến nhiều mô hình {{$rapport->Rapport->nom}}
411, nhưng bạn muốn xác định một cách thuận tiện để tương tác với đơn hàng gần đây nhất mà người dùng đã đặt. Bạn có thể thực hiện điều này bằng cách sử dụng loại mối quan hệ hasOne[Phone::class];
}
}
45 kết hợp với các phương pháp {{$rapport->Rapport->nom}}
413{{$rapport->Rapport->nom}}
41Tương tự như vậy, bạn có thể xác định một phương thức để truy xuất mô hình liên quan "cũ nhất" hoặc đầu tiên của một mối quan hệ
{{$rapport->Rapport->nom}}
42Theo mặc định, các phương thức
{{$rapport->Rapport->nom}}
414 và {{$rapport->Rapport->nom}}
415 sẽ truy xuất mô hình liên quan mới nhất hoặc cũ nhất dựa trên khóa chính của mô hình, khóa này phải có thể sắp xếp được. Tuy nhiên, đôi khi bạn có thể muốn truy xuất một mô hình từ một mối quan hệ lớn hơn bằng cách sử dụng tiêu chí sắp xếp khácVí dụ: sử dụng phương pháp
{{$rapport->Rapport->nom}}
413, bạn có thể truy xuất đơn đặt hàng đắt nhất của người dùng. Phương thức {{$rapport->Rapport->nom}}
413 chấp nhận cột có thể sắp xếp làm đối số đầu tiên và hàm tổng hợp [{{$rapport->Rapport->nom}}
418 hoặc {{$rapport->Rapport->nom}}
419] sẽ áp dụng khi truy vấn mô hình liên quan{{$rapport->Rapport->nom}}
43Ghi chú. Vì PostgreSQL không hỗ trợ thực thi hàm
420 đối với các cột UUID nên hiện tại không thể sử dụng mối quan hệ một trong nhiều kết hợp với các cột UUID của PostgreSQL{{$rapport->Rapport->nom}}
Nâng cao có một trong nhiều mối quan hệ
Có thể xây dựng các mối quan hệ "có một trong nhiều" nâng cao hơn. Ví dụ: Một mô hình
{{$rapport->Rapport->nom}}
421 có thể có nhiều mô hình {{$rapport->Rapport->nom}}
422 được liên kết được giữ lại trong hệ thống ngay cả sau khi giá mới được công bố. Ngoài ra, dữ liệu giá mới cho sản phẩm có thể được xuất bản trước để có hiệu lực vào một ngày trong tương lai thông qua cột {{$rapport->Rapport->nom}}
423Vì vậy, tóm lại, chúng tôi cần truy xuất giá được xuất bản mới nhất khi ngày xuất bản không phải là trong tương lai. Ngoài ra, nếu hai giá có cùng ngày xuất bản, chúng tôi sẽ ưu tiên giá có ID lớn nhất. Để thực hiện điều này, chúng ta phải chuyển một mảng tới phương thức
{{$rapport->Rapport->nom}}
413 có chứa các cột có thể sắp xếp để xác định giá mới nhất. Ngoài ra, một bao đóng sẽ được cung cấp làm đối số thứ hai cho phương thức {{$rapport->Rapport->nom}}
413. Việc đóng này sẽ chịu trách nhiệm thêm các ràng buộc ngày xuất bản bổ sung vào truy vấn mối quan hệ{{$rapport->Rapport->nom}}
44Có Một Thông Qua
Mối quan hệ "có một lần" xác định mối quan hệ một-một với một mô hình khác. Tuy nhiên, mối quan hệ này chỉ ra rằng mô hình khai báo có thể được khớp với một phiên bản của mô hình khác bằng cách tiếp tục thông qua mô hình thứ ba
Ví dụ: trong ứng dụng cửa hàng sửa chữa xe, mỗi kiểu máy
{{$rapport->Rapport->nom}}
426 có thể được liên kết với một kiểu máy {{$rapport->Rapport->nom}}
427 và mỗi kiểu máy {{$rapport->Rapport->nom}}
427 có thể được liên kết với một kiểu máy {{$rapport->Rapport->nom}}
429. Mặc dù thợ máy và chủ sở hữu không có mối quan hệ trực tiếp trong cơ sở dữ liệu, nhưng thợ máy có thể truy cập chủ sở hữu thông qua mô hình {{$rapport->Rapport->nom}}
427. Hãy xem các bảng cần thiết để xác định mối quan hệ này{{$rapport->Rapport->nom}}
45Bây giờ chúng ta đã kiểm tra cấu trúc bảng cho mối quan hệ, hãy xác định mối quan hệ trên mô hình
{{$rapport->Rapport->nom}}
426{{$rapport->Rapport->nom}}
46Đối số đầu tiên được truyền cho phương thức
{{$rapport->Rapport->nom}}
400 là tên của mô hình cuối cùng mà chúng tôi muốn truy cập, trong khi đối số thứ hai là tên của mô hình trung gianCông ước chính
Các quy ước khóa ngoại điển hình của Eloquent sẽ được sử dụng khi thực hiện các truy vấn của mối quan hệ. Nếu bạn muốn tùy chỉnh các khóa của mối quan hệ, bạn có thể chuyển chúng làm đối số thứ ba và thứ tư cho phương thức
{{$rapport->Rapport->nom}}
400. Đối số thứ ba là tên của khóa ngoại trên mô hình trung gian. Đối số thứ tư là tên của khóa ngoại trên mô hình cuối cùng. Đối số thứ năm là khóa cục bộ, trong khi đối số thứ sáu là khóa cục bộ của mô hình trung gian{{$rapport->Rapport->nom}}
47Có Nhiều Thông Qua
Mối quan hệ "có nhiều thông qua" cung cấp một cách thuận tiện để truy cập các mối quan hệ ở xa thông qua một mối quan hệ trung gian. Ví dụ: giả sử chúng ta đang xây dựng một nền tảng triển khai như Laravel Vapor. Mô hình
{{$rapport->Rapport->nom}}
434 có thể truy cập nhiều mô hình {{$rapport->Rapport->nom}}
435 thông qua mô hình trung gian {{$rapport->Rapport->nom}}
436. Sử dụng ví dụ này, bạn có thể dễ dàng thu thập tất cả các triển khai cho một dự án nhất định. Hãy xem các bảng cần thiết để xác định mối quan hệ này{{$rapport->Rapport->nom}}
48Bây giờ chúng ta đã kiểm tra cấu trúc bảng cho mối quan hệ, hãy xác định mối quan hệ trên mô hình
{{$rapport->Rapport->nom}}
434{{$rapport->Rapport->nom}}
49Đối số đầu tiên được truyền cho phương thức
{{$rapport->Rapport->nom}}
438 là tên của mô hình cuối cùng mà chúng tôi muốn truy cập, trong khi đối số thứ hai là tên của mô hình trung gianMặc dù bảng của mô hình
{{$rapport->Rapport->nom}}
435 không chứa cột {{$rapport->Rapport->nom}}
440, nhưng mối quan hệ {{$rapport->Rapport->nom}}
438 cung cấp quyền truy cập vào các triển khai của dự án thông qua {{$rapport->Rapport->nom}}
442. Để truy xuất các mô hình này, Eloquent kiểm tra cột {{$rapport->Rapport->nom}}
440 trên bảng của mô hình trung gian {{$rapport->Rapport->nom}}
436. Sau khi tìm thấy ID môi trường có liên quan, chúng được sử dụng để truy vấn bảng của mô hình {{$rapport->Rapport->nom}}
435Công ước chính
Các quy ước khóa ngoại điển hình của Eloquent sẽ được sử dụng khi thực hiện các truy vấn của mối quan hệ. Nếu bạn muốn tùy chỉnh các khóa của mối quan hệ, bạn có thể chuyển chúng làm đối số thứ ba và thứ tư cho phương thức
{{$rapport->Rapport->nom}}
438. Đối số thứ ba là tên của khóa ngoại trên mô hình trung gian. Đối số thứ tư là tên của khóa ngoại trên mô hình cuối cùng. Đối số thứ năm là khóa cục bộ, trong khi đối số thứ sáu là khóa cục bộ của mô hình trung gian{{$rapport->Rapport->nom}}
80Nhiều đến nhiều mối quan hệ
Mối quan hệ nhiều-nhiều phức tạp hơn một chút so với mối quan hệ
hasOne[Phone::class];
}
}
45 và hasOne[Phone::class];
}
}
83. Một ví dụ về mối quan hệ nhiều-nhiều là một người dùng có nhiều vai trò và những vai trò đó cũng được chia sẻ bởi những người dùng khác trong ứng dụng. Ví dụ: người dùng có thể được chỉ định vai trò "Tác giả" và "Biên tập viên"; . Vì vậy, một người dùng có nhiều vai trò và một vai trò có nhiều người dùngCấu trúc bảng
Để xác định mối quan hệ này, cần có ba bảng cơ sở dữ liệu.
{{$rapport->Rapport->nom}}
449, {{$rapport->Rapport->nom}}
450 và {{$rapport->Rapport->nom}}
451. Bảng {{$rapport->Rapport->nom}}
451 được lấy từ thứ tự bảng chữ cái của tên kiểu máy có liên quan và chứa các cột hasOne[Phone::class];
}
}
50 và {{$rapport->Rapport->nom}}
454. Bảng này được sử dụng làm bảng trung gian liên kết người dùng và vai tròHãy nhớ rằng, vì một vai trò có thể thuộc về nhiều người dùng, nên chúng ta không thể chỉ đặt một cột
hasOne[Phone::class];
}
}
50 trên bảng {{$rapport->Rapport->nom}}
450. Điều này có nghĩa là một vai trò chỉ có thể thuộc về một người dùng. Để cung cấp hỗ trợ cho các vai trò được chỉ định cho nhiều người dùng, bảng {{$rapport->Rapport->nom}}
451 là cần thiết. Chúng ta có thể tóm tắt cấu trúc bảng của mối quan hệ như vậy{{$rapport->Rapport->nom}}
81Cấu trúc mô hình
Mối quan hệ nhiều-nhiều được xác định bằng cách viết một phương thức trả về kết quả của phương thức
{{$rapport->Rapport->nom}}
458. Phương thức {{$rapport->Rapport->nom}}
458 được cung cấp bởi lớp cơ sở hasOne[Phone::class];
}
}
47 được sử dụng bởi tất cả các mô hình Eloquent trong ứng dụng của bạn. Ví dụ: hãy xác định phương thức {{$rapport->Rapport->nom}}
450 trên mô hình hasOne[Phone::class];
}
}
40 của chúng tôi. Đối số đầu tiên được truyền cho phương thức này là tên của lớp mô hình liên quan{{$rapport->Rapport->nom}}
82Khi mối quan hệ được xác định, bạn có thể truy cập vai trò của người dùng bằng thuộc tính mối quan hệ động
{{$rapport->Rapport->nom}}
450{{$rapport->Rapport->nom}}
83Vì tất cả các mối quan hệ cũng đóng vai trò là trình tạo truy vấn, nên bạn có thể thêm các ràng buộc khác vào truy vấn mối quan hệ bằng cách gọi phương thức
{{$rapport->Rapport->nom}}
450 và tiếp tục xâu chuỗi các điều kiện vào truy vấn{{$rapport->Rapport->nom}}
84Để xác định tên bảng của bảng trung gian của mối quan hệ, Eloquent sẽ nối hai tên mô hình có liên quan theo thứ tự bảng chữ cái. Tuy nhiên, bạn có thể tự do ghi đè quy ước này. Bạn có thể làm như vậy bằng cách truyền đối số thứ hai cho phương thức
{{$rapport->Rapport->nom}}
458{{$rapport->Rapport->nom}}
85Ngoài việc tùy chỉnh tên của bảng trung gian, bạn cũng có thể tùy chỉnh tên cột của các khóa trên bảng bằng cách chuyển các đối số bổ sung cho phương thức
{{$rapport->Rapport->nom}}
458. Đối số thứ ba là tên khóa ngoại của mô hình mà bạn đang xác định mối quan hệ, trong khi đối số thứ tư là tên khóa ngoại của mô hình mà bạn đang tham gia{{$rapport->Rapport->nom}}
86Xác định nghịch đảo của mối quan hệ
Để xác định "nghịch đảo" của mối quan hệ nhiều-nhiều, bạn nên xác định một phương thức trên mô hình liên quan, phương thức này cũng trả về kết quả của phương thức
{{$rapport->Rapport->nom}}
458. Để hoàn thành ví dụ về vai trò/người dùng của chúng tôi, hãy xác định phương thức {{$rapport->Rapport->nom}}
449 trên mô hình {{$rapport->Rapport->nom}}
469{{$rapport->Rapport->nom}}
87Như bạn có thể thấy, mối quan hệ được xác định chính xác giống như đối tác mô hình
hasOne[Phone::class];
}
}
40 của nó ngoại trừ việc tham chiếu mô hình {{$rapport->Rapport->nom}}
404. Vì chúng tôi đang sử dụng lại phương pháp {{$rapport->Rapport->nom}}
458, nên tất cả các tùy chọn tùy chỉnh khóa và bảng thông thường đều khả dụng khi xác định "nghịch đảo" của mối quan hệ nhiều-nhiềuTruy xuất các cột trong bảng trung gian
Như bạn đã biết, làm việc với quan hệ nhiều-nhiều yêu cầu phải có bảng trung gian. Eloquent cung cấp một số cách rất hữu ích để tương tác với bảng này. Ví dụ: giả sử mô hình
hasOne[Phone::class];
}
}
40 của chúng tôi có nhiều mô hình {{$rapport->Rapport->nom}}
469 có liên quan đến. Sau khi truy cập vào mối quan hệ này, chúng ta có thể truy cập vào bảng trung gian bằng cách sử dụng thuộc tính {{$rapport->Rapport->nom}}
475 trên các mô hình{{$rapport->Rapport->nom}}
88Lưu ý rằng mỗi mô hình
{{$rapport->Rapport->nom}}
469 mà chúng tôi truy xuất được tự động gán một thuộc tính {{$rapport->Rapport->nom}}
475. Thuộc tính này chứa một mô hình đại diện cho bảng trung gianTheo mặc định, chỉ các phím mô hình sẽ có mặt trên mô hình
{{$rapport->Rapport->nom}}
475. Nếu bảng trung gian của bạn chứa các thuộc tính bổ sung, bạn phải chỉ định chúng khi xác định mối quan hệ{{$rapport->Rapport->nom}}
89Nếu bạn muốn bảng trung gian của mình có dấu thời gian
{{$rapport->Rapport->nom}}
479 và {{$rapport->Rapport->nom}}
480 được Eloquent tự động duy trì, hãy gọi phương thức {{$rapport->Rapport->nom}}
481 khi xác định mối quan hệhasOne[Phone::class];
}
}
50Ghi chú. Các bảng trung gian sử dụng dấu thời gian được duy trì tự động của Eloquent bắt buộc phải có cả hai cột dấu thời gian
479 và{{$rapport->Rapport->nom}}
480{{$rapport->Rapport->nom}}
Tùy chỉnh tên thuộc tính {{$rapport->Rapport->nom}}
475
{{$rapport->Rapport->nom}}
Như đã lưu ý trước đây, các thuộc tính từ bảng trung gian có thể được truy cập trên các mô hình thông qua thuộc tính
{{$rapport->Rapport->nom}}
475. Tuy nhiên, bạn có thể tự do tùy chỉnh tên của thuộc tính này để phản ánh tốt hơn mục đích của nó trong ứng dụng của bạnVí dụ: nếu ứng dụng của bạn chứa người dùng có thể đăng ký podcast, bạn có thể có mối quan hệ nhiều-nhiều giữa người dùng và podcast. Nếu trường hợp này xảy ra, bạn có thể muốn đổi tên thuộc tính bảng trung gian của mình thành
{{$rapport->Rapport->nom}}
486 thay vì {{$rapport->Rapport->nom}}
475. Điều này có thể được thực hiện bằng cách sử dụng phương pháp {{$rapport->Rapport->nom}}
488 khi xác định mối quan hệhasOne[Phone::class];
}
}
51Khi thuộc tính bảng trung gian tùy chỉnh đã được chỉ định, bạn có thể truy cập dữ liệu bảng trung gian bằng tên tùy chỉnh
hasOne[Phone::class];
}
}
52Lọc truy vấn qua cột bảng trung gian
Bạn cũng có thể lọc các kết quả được trả về bởi truy vấn mối quan hệ
{{$rapport->Rapport->nom}}
458 bằng cách sử dụng các phương pháp {{$rapport->Rapport->nom}}
490, {{$rapport->Rapport->nom}}
491, {{$rapport->Rapport->nom}}
492, {{$rapport->Rapport->nom}}
493, {{$rapport->Rapport->nom}}
494, {{$rapport->Rapport->nom}}
495 và {{$rapport->Rapport->nom}}
496 khi xác định mối quan hệhasOne[Phone::class];
}
}
53Xác định các mô hình bảng trung gian tùy chỉnh
Nếu bạn muốn xác định một mô hình tùy chỉnh để biểu thị bảng trung gian của mối quan hệ nhiều-nhiều, bạn có thể gọi phương thức
{{$rapport->Rapport->nom}}
497 khi xác định mối quan hệ. Các mô hình trục tùy chỉnh cho bạn cơ hội xác định các phương pháp bổ sung trên mô hình trụcCác mô hình trục nhiều-nhiều tùy chỉnh sẽ mở rộng lớp
{{$rapport->Rapport->nom}}
498 trong khi các mô hình trục nhiều-nhiều tùy chỉnh đa hình tùy chỉnh sẽ mở rộng lớp {{$rapport->Rapport->nom}}
499. Ví dụ: chúng tôi có thể xác định mô hình {{$rapport->Rapport->nom}}
469 sử dụng mô hình trục {{$rapport->Rapport->nom}}
801 tùy chỉnhhasOne[Phone::class];
}
}
54Khi xác định mô hình
{{$rapport->Rapport->nom}}
801, bạn nên mở rộng lớp {{$rapport->Rapport->nom}}
498hasOne[Phone::class];
}
}
55{{$rapport->Rapport->nom}}
804 đặc điểm. Nếu bạn cần xóa mềm các bản ghi trục, hãy xem xét chuyển đổi mô hình trục của bạn thành một mô hình Eloquent thực tếMô hình xoay vòng tùy chỉnh và ID tăng dần
Nếu bạn đã xác định mối quan hệ nhiều-nhiều sử dụng mô hình trục tùy chỉnh và mô hình trục đó có khóa chính tự động tăng, thì bạn nên đảm bảo rằng lớp mô hình trục tùy chỉnh của mình xác định thuộc tính
{{$rapport->Rapport->nom}}
805 được đặt thành {{$rapport->Rapport->nom}}
806hasOne[Phone::class];
}
}
56Mối quan hệ đa hình
Mối quan hệ đa hình cho phép mô hình con thuộc về nhiều loại mô hình bằng cách sử dụng một liên kết duy nhất. Ví dụ: hãy tưởng tượng bạn đang xây dựng một ứng dụng cho phép người dùng chia sẻ các bài đăng trên blog và video. Trong một ứng dụng như vậy, một mô hình
hasOne[Phone::class];
}
}
76 có thể thuộc về cả hai mô hình hasOne[Phone::class];
}
}
87 và {{$rapport->Rapport->nom}}
809Một Đối Một [Đa hình]
Cấu trúc bảng
Mối quan hệ đa hình một đối một tương tự như mối quan hệ một đối một điển hình; . Ví dụ: blog
hasOne[Phone::class];
}
}
87 và hasOne[Phone::class];
}
}
40 có thể chia sẻ mối quan hệ đa hình với mô hình {{$rapport->Rapport->nom}}
812. Sử dụng mối quan hệ đa hình một đối một cho phép bạn có một bảng hình ảnh duy nhất có thể được liên kết với bài đăng và người dùng. Đầu tiên, hãy kiểm tra cấu trúc bảnghasOne[Phone::class];
}
}
57Lưu ý các cột
{{$rapport->Rapport->nom}}
813 và {{$rapport->Rapport->nom}}
814 trên bảng {{$rapport->Rapport->nom}}
815. Cột {{$rapport->Rapport->nom}}
813 sẽ chứa giá trị ID của bài đăng hoặc người dùng, trong khi cột {{$rapport->Rapport->nom}}
814 sẽ chứa tên lớp của mô hình gốc. Cột {{$rapport->Rapport->nom}}
814 được Eloquent sử dụng để xác định "loại" mô hình gốc nào sẽ trả về khi truy cập vào quan hệ {{$rapport->Rapport->nom}}
819. Trong trường hợp này, cột sẽ chứa {{$rapport->Rapport->nom}}
820 hoặc {{$rapport->Rapport->nom}}
404Cấu trúc mô hình
Tiếp theo, hãy xem xét các định nghĩa mô hình cần thiết để xây dựng mối quan hệ này
hasOne[Phone::class];
}
}
58Truy xuất mối quan hệ
Khi bảng cơ sở dữ liệu và các mô hình của bạn được xác định, bạn có thể truy cập các mối quan hệ thông qua các mô hình của mình. Ví dụ: để truy xuất hình ảnh cho bài đăng, chúng ta có thể truy cập thuộc tính quan hệ động
{{$rapport->Rapport->nom}}
822hasOne[Phone::class];
}
}
59Bạn có thể truy xuất cha của mô hình đa hình bằng cách truy cập tên của phương thức thực hiện lệnh gọi tới
{{$rapport->Rapport->nom}}
823. Trong trường hợp này, đó là phương pháp {{$rapport->Rapport->nom}}
819 trên mô hình {{$rapport->Rapport->nom}}
812. Vì vậy, chúng tôi sẽ truy cập phương thức đó dưới dạng thuộc tính mối quan hệ động$user->posts[]->where['active', 1]->get[];
10Mối quan hệ
{{$rapport->Rapport->nom}}
819 trên mô hình {{$rapport->Rapport->nom}}
812 sẽ trả về một phiên bản hasOne[Phone::class];
}
}
87 hoặc hasOne[Phone::class];
}
}
40, tùy thuộc vào loại mô hình nào sở hữu hình ảnhCông ước chính
Nếu cần, bạn có thể chỉ định tên của cột "id" và "type" được mô hình con đa hình của bạn sử dụng. Nếu bạn làm như vậy, hãy đảm bảo rằng bạn luôn chuyển tên của mối quan hệ làm đối số đầu tiên cho phương thức
{{$rapport->Rapport->nom}}
823. Thông thường, giá trị này phải khớp với tên phương thức, vì vậy bạn có thể sử dụng hằng số {{$rapport->Rapport->nom}}
831 của PHP$user->posts[]->where['active', 1]->get[];
11Một Đến Nhiều [Đa hình]
Cấu trúc bảng
Mối quan hệ đa hình một-nhiều tương tự như mối quan hệ một-nhiều điển hình; . Ví dụ: hãy tưởng tượng người dùng ứng dụng của bạn có thể "nhận xét" về bài đăng và video. Sử dụng các mối quan hệ đa hình, bạn có thể sử dụng một bảng
hasOne[Phone::class];
}
}
80 duy nhất để chứa nhận xét cho cả bài đăng và video. Đầu tiên, hãy kiểm tra cấu trúc bảng cần thiết để xây dựng mối quan hệ này$user->posts[]->where['active', 1]->get[];
12Cấu trúc mô hình
Tiếp theo, hãy xem xét các định nghĩa mô hình cần thiết để xây dựng mối quan hệ này
$user->posts[]->where['active', 1]->get[];
13Truy xuất mối quan hệ
Khi bảng cơ sở dữ liệu và các mô hình của bạn được xác định, bạn có thể truy cập các mối quan hệ thông qua các thuộc tính mối quan hệ động của mô hình của bạn. Ví dụ: để truy cập tất cả các nhận xét cho một bài đăng, chúng ta có thể sử dụng thuộc tính động
hasOne[Phone::class];
}
}
80$user->posts[]->where['active', 1]->get[];
14Bạn cũng có thể truy xuất cha của một mô hình con đa hình bằng cách truy cập tên của phương thức thực hiện lệnh gọi tới
{{$rapport->Rapport->nom}}
823. Trong trường hợp này, đó là phương pháp {{$rapport->Rapport->nom}}
835 trên mô hình hasOne[Phone::class];
}
}
76. Vì vậy, chúng tôi sẽ truy cập phương thức đó dưới dạng thuộc tính quan hệ động để truy cập mô hình gốc của nhận xét$user->posts[]->where['active', 1]->get[];
15Mối quan hệ
{{$rapport->Rapport->nom}}
835 trên mô hình hasOne[Phone::class];
}
}
76 sẽ trả về một thể hiện hasOne[Phone::class];
}
}
87 hoặc {{$rapport->Rapport->nom}}
809, tùy thuộc vào loại mô hình nào là cha của nhận xétMột trong nhiều [Đa hình]
Đôi khi một mô hình có thể có nhiều mô hình liên quan, nhưng bạn muốn dễ dàng truy xuất mô hình liên quan "mới nhất" hoặc "cũ nhất" của mối quan hệ. Ví dụ: một mô hình
hasOne[Phone::class];
}
}
40 có thể liên quan đến nhiều mô hình {{$rapport->Rapport->nom}}
812, nhưng bạn muốn xác định một cách thuận tiện để tương tác với hình ảnh gần đây nhất mà người dùng đã tải lên. Bạn có thể thực hiện điều này bằng cách sử dụng loại mối quan hệ {{$rapport->Rapport->nom}}
401 kết hợp với các phương pháp {{$rapport->Rapport->nom}}
413$user->posts[]->where['active', 1]->get[];
16Tương tự như vậy, bạn có thể xác định một phương thức để truy xuất mô hình liên quan "cũ nhất" hoặc đầu tiên của một mối quan hệ
$user->posts[]->where['active', 1]->get[];
17Theo mặc định, các phương thức
{{$rapport->Rapport->nom}}
414 và {{$rapport->Rapport->nom}}
415 sẽ truy xuất mô hình liên quan mới nhất hoặc cũ nhất dựa trên khóa chính của mô hình, khóa này phải có thể sắp xếp được. Tuy nhiên, đôi khi bạn có thể muốn truy xuất một mô hình từ một mối quan hệ lớn hơn bằng cách sử dụng tiêu chí sắp xếp khácVí dụ: sử dụng phương pháp
{{$rapport->Rapport->nom}}
413, bạn có thể truy xuất hình ảnh được "thích" nhiều nhất của người dùng. Phương thức {{$rapport->Rapport->nom}}
413 chấp nhận cột có thể sắp xếp làm đối số đầu tiên và hàm tổng hợp [{{$rapport->Rapport->nom}}
418 hoặc {{$rapport->Rapport->nom}}
419] sẽ áp dụng khi truy vấn mô hình liên quan$user->posts[]->where['active', 1]->get[];
18Mẹo. Có thể xây dựng các mối quan hệ "một trong nhiều" nâng cao hơn. Để biết thêm thông tin, vui lòng tham khảo ý kiến của
Nhiều Đến Nhiều [Đa hình]
Cấu trúc bảng
Mối quan hệ đa hình nhiều-nhiều phức tạp hơn một chút so với mối quan hệ "hình một" và "hình nhiều". Ví dụ: mô hình
hasOne[Phone::class];
}
}
87 và mô hình {{$rapport->Rapport->nom}}
809 có thể chia sẻ mối quan hệ đa hình với mô hình {{$rapport->Rapport->nom}}
853. Sử dụng mối quan hệ đa hình nhiều-nhiều trong tình huống này sẽ cho phép ứng dụng của bạn có một bảng các thẻ duy nhất có thể được liên kết với bài đăng hoặc video. Đầu tiên, hãy kiểm tra cấu trúc bảng cần thiết để xây dựng mối quan hệ này$user->posts[]->where['active', 1]->get[];
19Mẹo. Trước khi đi sâu vào các mối quan hệ nhiều-nhiều đa hình, bạn có thể đọc tài liệu về các mối quan hệ điển hình.
Cấu trúc mô hình
Tiếp theo, chúng tôi đã sẵn sàng để xác định các mối quan hệ trên các mô hình. Cả hai mô hình
hasOne[Phone::class];
}
}
87 và {{$rapport->Rapport->nom}}
809 sẽ chứa một phương thức {{$rapport->Rapport->nom}}
856 gọi phương thức {{$rapport->Rapport->nom}}
857 được cung cấp bởi lớp mô hình Eloquent cơ sởPhương thức
{{$rapport->Rapport->nom}}
857 chấp nhận tên của mô hình liên quan cũng như "tên mối quan hệ". Dựa trên tên mà chúng tôi đã gán cho tên bảng trung gian của mình và các khóa chứa trong đó, chúng tôi sẽ gọi mối quan hệ là "có thể gắn thẻ"hasOne[Phone::class];
}
}
30Xác định nghịch đảo của mối quan hệ
Tiếp theo, trên mô hình
{{$rapport->Rapport->nom}}
853, bạn nên xác định một phương thức cho từng mô hình gốc có thể có của nó. Vì vậy, trong ví dụ này, chúng ta sẽ định nghĩa một phương thức hasOne[Phone::class];
}
}
39 và một phương thức {{$rapport->Rapport->nom}}
861. Cả hai phương thức này sẽ trả về kết quả của phương thức {{$rapport->Rapport->nom}}
862Phương thức
{{$rapport->Rapport->nom}}
862 chấp nhận tên của mô hình liên quan cũng như "tên mối quan hệ". Dựa trên tên mà chúng tôi đã gán cho tên bảng trung gian của mình và các khóa chứa trong đó, chúng tôi sẽ gọi mối quan hệ là "có thể gắn thẻ"hasOne[Phone::class];
}
}
31Truy xuất mối quan hệ
Khi bảng cơ sở dữ liệu và các mô hình của bạn được xác định, bạn có thể truy cập các mối quan hệ thông qua các mô hình của mình. Ví dụ: để truy cập tất cả các thẻ cho một bài đăng, bạn có thể sử dụng thuộc tính quan hệ động
{{$rapport->Rapport->nom}}
856hasOne[Phone::class];
}
}
32Bạn có thể truy xuất cha của một quan hệ đa hình từ mô hình con đa hình bằng cách truy cập tên của phương thức thực hiện lệnh gọi tới
{{$rapport->Rapport->nom}}
862. Trong trường hợp này, đó là phương pháp hasOne[Phone::class];
}
}
39 hoặc {{$rapport->Rapport->nom}}
861 trên mô hình {{$rapport->Rapport->nom}}
853hasOne[Phone::class];
}
}
33Các loại đa hình tùy chỉnh
Theo mặc định, Laravel sẽ sử dụng tên lớp đủ điều kiện để lưu trữ "loại" của mô hình liên quan. Chẳng hạn, với ví dụ về mối quan hệ một-nhiều ở trên, trong đó mô hình
hasOne[Phone::class];
}
}
76 có thể thuộc về mô hình hasOne[Phone::class];
}
}
87 hoặc {{$rapport->Rapport->nom}}
809, thì mặc định {{$rapport->Rapport->nom}}
872 sẽ tương ứng là {{$rapport->Rapport->nom}}
820 hoặc {{$rapport->Rapport->nom}}
874. Tuy nhiên, bạn có thể muốn tách các giá trị này khỏi cấu trúc bên trong ứng dụng của mìnhVí dụ: thay vì sử dụng tên kiểu máy làm "loại", chúng tôi có thể sử dụng các chuỗi đơn giản như
hasOne[Phone::class];
}
}
86 và {{$rapport->Rapport->nom}}
876. Bằng cách đó, các giá trị cột "loại" đa hình trong cơ sở dữ liệu của chúng tôi sẽ vẫn hợp lệ ngay cả khi các mô hình được đổi tênhasOne[Phone::class];
}
}
34Bạn có thể gọi phương thức
{{$rapport->Rapport->nom}}
877 trong phương thức {{$rapport->Rapport->nom}}
878 của lớp {{$rapport->Rapport->nom}}
879 của bạn hoặc tạo một nhà cung cấp dịch vụ riêng nếu bạn muốnBạn có thể xác định bí danh hình thái của một mô hình nhất định trong thời gian chạy bằng cách sử dụng phương pháp
{{$rapport->Rapport->nom}}
880 của mô hình. Ngược lại, bạn có thể xác định tên lớp đủ điều kiện được liên kết với bí danh hình thái bằng phương pháp {{$rapport->Rapport->nom}}
881hasOne[Phone::class];
}
}
35Ghi chú. Khi thêm "bản đồ biến hình" vào ứng dụng hiện tại của bạn, mọi giá trị cột
882 có thể biến đổi trong cơ sở dữ liệu của bạn vẫn chứa một lớp đủ điều kiện sẽ cần phải được chuyển đổi thành tên "bản đồ" của nó{{$rapport->Rapport->nom}}
Mối quan hệ động
Bạn có thể sử dụng phương pháp
{{$rapport->Rapport->nom}}
883 để xác định mối quan hệ giữa các mô hình Eloquent trong thời gian chạy. Mặc dù thường không được đề xuất để phát triển ứng dụng thông thường, nhưng điều này đôi khi có thể hữu ích khi phát triển các gói LaravelPhương thức
{{$rapport->Rapport->nom}}
883 chấp nhận tên mối quan hệ mong muốn làm đối số đầu tiên của nó. Đối số thứ hai được truyền cho phương thức phải là một bao đóng chấp nhận thể hiện của mô hình và trả về một định nghĩa mối quan hệ Eloquent hợp lệ. Thông thường, bạn nên định cấu hình các mối quan hệ động trong phương thức khởi động của nhà cung cấp dịch vụhasOne[Phone::class];
}
}
36Ghi chú. Khi xác định các mối quan hệ động, luôn cung cấp các đối số tên khóa rõ ràng cho các phương thức của mối quan hệ Eloquent
Quan hệ truy vấn
Vì tất cả các mối quan hệ của Eloquent đều được xác định thông qua các phương thức, nên bạn có thể gọi các phương thức đó để lấy một thể hiện của mối quan hệ mà không thực sự thực hiện truy vấn để tải các mô hình liên quan. Ngoài ra, tất cả các loại mối quan hệ Eloquent cũng đóng vai trò là trình tạo truy vấn, cho phép bạn tiếp tục xâu chuỗi các ràng buộc vào truy vấn mối quan hệ trước khi cuối cùng thực hiện truy vấn SQL đối với cơ sở dữ liệu của bạn
Ví dụ: hãy tưởng tượng một ứng dụng blog trong đó mô hình
hasOne[Phone::class];
}
}
40 có nhiều mô hình hasOne[Phone::class];
}
}
87 được liên kếthasOne[Phone::class];
}
}
37Bạn có thể truy vấn mối quan hệ
hasOne[Phone::class];
}
}
39 và thêm các ràng buộc bổ sung cho mối quan hệ như vậyhasOne[Phone::class];
}
}
38Bạn có thể sử dụng bất kỳ phương thức nào của trình tạo truy vấn Laravel trên mối quan hệ, vì vậy hãy đảm bảo khám phá tài liệu về trình tạo truy vấn để tìm hiểu về tất cả các phương pháp có sẵn cho bạn
Xâu chuỗi các mệnh đề {{$rapport->Rapport->nom}}
888 sau các mối quan hệ
{{$rapport->Rapport->nom}}
Như đã minh họa trong ví dụ trên, bạn có thể tự do thêm các ràng buộc bổ sung cho các mối quan hệ khi truy vấn chúng. Tuy nhiên, hãy thận trọng khi xâu chuỗi các mệnh đề _______ 1888 vào một mối quan hệ, vì các mệnh đề ________ 1888 sẽ được nhóm hợp lý ở cùng cấp độ với ràng buộc quan hệ
hasOne[Phone::class];
}
}
39Ví dụ trên sẽ tạo SQL sau. Như bạn có thể thấy, mệnh đề
{{$rapport->Rapport->nom}}
891 hướng dẫn truy vấn trả về bất kỳ người dùng nào có hơn 100 phiếu bầu. Truy vấn không còn bị hạn chế đối với một người dùng cụ thểhasOne[Phone::class];
}
}
60Trong hầu hết các trường hợp, bạn nên sử dụng để nhóm các kiểm tra có điều kiện giữa các dấu ngoặc đơn
hasOne[Phone::class];
}
}
61Ví dụ trên sẽ tạo ra SQL sau. Lưu ý rằng nhóm hợp lý đã nhóm đúng các ràng buộc và truy vấn vẫn bị ràng buộc đối với một người dùng cụ thể
hasOne[Phone::class];
}
}
62Phương thức quan hệ Vs. Thuộc tính động
Nếu bạn không cần thêm các ràng buộc bổ sung vào truy vấn mối quan hệ Eloquent, bạn có thể truy cập mối quan hệ như thể nó là một thuộc tính. Ví dụ: tiếp tục sử dụng các mô hình mẫu
hasOne[Phone::class];
}
}
40 và hasOne[Phone::class];
}
}
87 của chúng tôi, chúng tôi có thể truy cập tất cả các bài đăng của người dùng như vậyhasOne[Phone::class];
}
}
63Thuộc tính mối quan hệ động thực hiện "tải chậm", nghĩa là chúng sẽ chỉ tải dữ liệu mối quan hệ khi bạn thực sự truy cập chúng. Do đó, các nhà phát triển thường sử dụng để tải trước các mối quan hệ mà họ biết sẽ được truy cập sau khi tải mô hình. Eager loading giúp giảm đáng kể các truy vấn SQL phải được thực thi để tải các mối quan hệ của mô hình
Truy vấn sự tồn tại của mối quan hệ
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 bài đăng trên blog có ít nhất một nhận xét. Để làm như vậy, bạn có thể chuyển tên của mối quan hệ cho các phương thức
{{$rapport->Rapport->nom}}
894 và {{$rapport->Rapport->nom}}
895hasOne[Phone::class];
}
}
64Bạn cũng có thể chỉ định một toán tử và giá trị đếm để tùy chỉnh thêm truy vấn
hasOne[Phone::class];
}
}
65Các câu lệnh
{{$rapport->Rapport->nom}}
894 lồng nhau có thể được xây dựng bằng cách sử dụng ký hiệu "dấu chấm". Ví dụ: bạn có thể truy xuất tất cả các bài đăng có ít nhất một nhận xét có ít nhất một hình ảnhhasOne[Phone::class];
}
}
66Nếu bạn cần nhiều quyền hơn nữa, bạn có thể sử dụng các phương pháp
{{$rapport->Rapport->nom}}
897 và {{$rapport->Rapport->nom}}
898 để xác định các ràng buộc truy vấn bổ sung đối với các truy vấn {{$rapport->Rapport->nom}}
894 của mình, chẳng hạn như kiểm tra nội dung của nhận xéthasOne[Phone::class];
}
}
67Ghi chú. Eloquent hiện không hỗ trợ truy vấn sự tồn tại của mối quan hệ trên cơ sở dữ liệu. Các mối quan hệ phải tồn tại trong cùng một cơ sở dữ liệu
Truy vấn tồn tại mối quan hệ nội tuyến
Nếu bạn muốn truy vấn sự tồn tại của một mối quan hệ với một điều kiện đơn giản, đơn giản gắn liền với truy vấn mối quan hệ, bạn có thể thấy thuận tiện hơn khi sử dụng các phương thức
hasOne[Phone::class];
}
}
500 và hasOne[Phone::class];
}
}
501. Ví dụ: chúng tôi có thể truy vấn tất cả các bài đăng có nhận xét chưa được phê duyệthasOne[Phone::class];
}
}
68Tất nhiên, giống như các cuộc gọi đến phương thức
{{$rapport->Rapport->nom}}
407 của trình tạo truy vấn, bạn cũng có thể chỉ định một toán tửhasOne[Phone::class];
}
}
69Truy vấn mối quan hệ vắng mặt
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 việc không có mối quan hệ. Ví dụ: hãy tưởng tượng bạn muốn truy xuất tất cả các bài đăng trên blog không có bất kỳ nhận xét nào. Để làm như vậy, bạn có thể chuyển tên của mối quan hệ cho các phương thức
hasOne[Phone::class];
}
}
503 và hasOne[Phone::class];
}
}
504hasOne[Phone::class];
}
}
70Nếu bạn cần nhiều quyền hơn nữa, bạn có thể sử dụng các phương pháp
hasOne[Phone::class];
}
}
505 và hasOne[Phone::class];
}
}
506 để thêm các ràng buộc truy vấn bổ sung vào các truy vấn hasOne[Phone::class];
}
}
503 của mình, chẳng hạn như kiểm tra nội dung của một nhận xéthasOne[Phone::class];
}
}
71Bạn có thể sử dụng ký hiệu "dấu chấm" để thực hiện truy vấn đối với mối quan hệ lồng nhau. Ví dụ: truy vấn sau sẽ truy xuất tất cả các bài đăng không có nhận xét;
hasOne[Phone::class];
}
}
72Truy vấn hình thái đối với các mối quan hệ
Để truy vấn sự tồn tại của các mối quan hệ "morph to", bạn có thể sử dụng các phương thức
hasOne[Phone::class];
}
}
508 và hasOne[Phone::class];
}
}
509. Các phương thức này chấp nhận tên của mối quan hệ làm đối số đầu tiên của chúng. Tiếp theo, các phương thức chấp nhận tên của các mô hình liên quan mà bạn muốn đưa vào truy vấn. Cuối cùng, bạn có thể cung cấp một bao đóng để tùy chỉnh truy vấn mối quan hệhasOne[Phone::class];
}
}
73Đôi khi, bạn có thể cần thêm các ràng buộc truy vấn dựa trên "loại" của mô hình đa hình liên quan. Bao đóng được truyền cho phương thức
hasOne[Phone::class];
}
}
508 có thể nhận giá trị hasOne[Phone::class];
}
}
511 làm đối số thứ hai của nó. Đối số này cho phép bạn kiểm tra "loại" truy vấn đang được tạohasOne[Phone::class];
}
}
74Truy vấn tất cả các mô hình liên quan
Thay vì chuyển một mảng các mô hình đa hình có thể có, bạn có thể cung cấp
hasOne[Phone::class];
}
}
512 dưới dạng giá trị ký tự đại diện. Điều này sẽ hướng dẫn Laravel truy xuất tất cả các loại đa hình có thể có từ cơ sở dữ liệu. Laravel sẽ thực hiện một truy vấn bổ sung để thực hiện thao tác nàyhasOne[Phone::class];
}
}
75Tổng hợp các mô hình liên quan
Đếm các mô hình liên quan
Đôi khi bạn có thể muốn đếm số mô hình có liên quan cho một mối quan hệ nhất định mà không thực sự tải các mô hình. Để thực hiện điều này, bạn có thể sử dụng phương pháp
hasOne[Phone::class];
}
}
513. Phương pháp hasOne[Phone::class];
}
}
513 sẽ đặt một thuộc tính hasOne[Phone::class];
}
}
515 trên các mô hình kết quảhasOne[Phone::class];
}
}
76Bằng cách chuyển một mảng tới phương thức
hasOne[Phone::class];
}
}
513, bạn có thể thêm "số đếm" cho nhiều mối quan hệ cũng như thêm các ràng buộc bổ sung cho các truy vấnhasOne[Phone::class];
}
}
77Bạn cũng có thể đặt tên cho kết quả đếm mối quan hệ, cho phép nhiều lần đếm trên cùng một mối quan hệ
hasOne[Phone::class];
}
}
78Đang tải số lượng bị hoãn
Sử dụng phương pháp
hasOne[Phone::class];
}
}
517, bạn có thể tải số lượng mối quan hệ sau khi mô hình gốc đã được truy xuấthasOne[Phone::class];
}
}
79Nếu bạn cần đặt các ràng buộc truy vấn bổ sung cho truy vấn đếm, bạn có thể chuyển một mảng được khóa bởi các mối quan hệ mà bạn muốn đếm. Các giá trị mảng phải là các bao đóng nhận phiên bản trình tạo truy vấn
hasOne[Phone::class];
}
}
30Đếm mối quan hệ & Tuyên bố chọn tùy chỉnh
Nếu bạn đang kết hợp
hasOne[Phone::class];
}
}
513 với câu lệnh hasOne[Phone::class];
}
}
519, hãy đảm bảo rằng bạn gọi hasOne[Phone::class];
}
}
513 sau phương thức hasOne[Phone::class];
}
}
519hasOne[Phone::class];
}
}
31Các chức năng tổng hợp khác
Ngoài phương thức
hasOne[Phone::class];
}
}
513, Eloquent còn cung cấp các phương thức hasOne[Phone::class];
}
}
523, hasOne[Phone::class];
}
}
524, hasOne[Phone::class];
}
}
525, hasOne[Phone::class];
}
}
526 và hasOne[Phone::class];
}
}
527. Các phương pháp này sẽ đặt thuộc tính hasOne[Phone::class];
}
}
528 trên các mô hình kết quả của bạnhasOne[Phone::class];
}
}
32Nếu bạn muốn truy cập kết quả của hàm tổng hợp bằng tên khác, bạn có thể chỉ định bí danh của riêng mình
hasOne[Phone::class];
}
}
33Giống như phương pháp
hasOne[Phone::class];
}
}
517, các phiên bản hoãn lại của các phương pháp này cũng có sẵn. Các hoạt động tổng hợp bổ sung này có thể được thực hiện trên các mô hình Eloquent đã được truy xuấthasOne[Phone::class];
}
}
34Nếu bạn đang kết hợp các phương thức tổng hợp này với câu lệnh
hasOne[Phone::class];
}
}
519, hãy đảm bảo rằng bạn gọi các phương thức tổng hợp sau phương thức hasOne[Phone::class];
}
}
519hasOne[Phone::class];
}
}
35Đếm các mô hình liên quan trên Morph đến các mối quan hệ
Nếu bạn muốn tải một mối quan hệ "morph to", cũng như số lượng mô hình có liên quan cho các thực thể khác nhau có thể được trả về bởi mối quan hệ đó, bạn có thể sử dụng phương thức
hasOne[Phone::class];
}
}
532 kết hợp với phương thức hasOne[Phone::class];
}
}
534 của mối quan hệ {{$rapport->Rapport->nom}}
823Trong ví dụ này, giả sử rằng các mô hình
hasOne[Phone::class];
}
}
535 và hasOne[Phone::class];
}
}
87 có thể tạo ra các mô hình hasOne[Phone::class];
}
}
537. Chúng tôi sẽ giả sử mô hình hasOne[Phone::class];
}
}
537 xác định mối quan hệ "morph to" có tên hasOne[Phone::class];
}
}
539 cho phép chúng tôi truy xuất mô hình hasOne[Phone::class];
}
}
535 hoặc hasOne[Phone::class];
}
}
87 gốc cho một phiên bản hasOne[Phone::class];
}
}
537 nhất định. Ngoài ra, giả sử rằng các mô hình hasOne[Phone::class];
}
}
535 "có nhiều" mô hình {{$rapport->Rapport->nom}}
853 và mô hình hasOne[Phone::class];
}
}
87 "có nhiều" mô hình hasOne[Phone::class];
}
}
76Bây giờ, hãy tưởng tượng chúng ta muốn truy xuất các phiên bản
hasOne[Phone::class];
}
}
537 và háo hức tải các mô hình chính của hasOne[Phone::class];
}
}
539 cho mỗi phiên bản hasOne[Phone::class];
}
}
537. Ngoài ra, chúng tôi muốn truy xuất số lượng thẻ được liên kết với mỗi ảnh của phụ huynh và số lượng nhận xét được liên kết với mỗi bài đăng của phụ huynhhasOne[Phone::class];
}
}
36Đang tải số lượng bị hoãn
Giả sử chúng ta đã truy xuất một tập hợp các mô hình
hasOne[Phone::class];
}
}
537 và bây giờ chúng ta muốn tải số lượng mối quan hệ lồng nhau cho các mô hình hasOne[Phone::class];
}
}
539 khác nhau được liên kết với nguồn cấp dữ liệu hoạt động. Bạn có thể sử dụng phương pháp hasOne[Phone::class];
}
}
552 để thực hiện việc nàyhasOne[Phone::class];
}
}
37háo hức tải
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
hasOne[Phone::class];
}
}
553 "thuộc về" mô hình hasOne[Phone::class];
}
}
554hasOne[Phone::class];
}
}
38Bây giờ, hãy truy xuất tất cả sách và tác giả của chúng
hasOne[Phone::class];
}
}
39Vòng lặp này sẽ thực hiện một truy vấn để truy xuất tất cả sách trong bảng cơ sở dữ liệu, sau đó thực hiện một truy vấn khác cho từng cuốn sách để truy xuất tác giả của cuốn sách. Vì vậy, nếu chúng tôi có 25 cuốn sách, đoạn mã trên sẽ chạy 26 truy vấn. một cho cuốn sách gốc và 25 truy vấn bổ sung để truy xuất tác giả của mỗi cuốn sách
Rất may, 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 tạo 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 pháp
hasOne[Phone::class];
}
}
532hasOne[Phone::class];
}
}
00Đối với thao tác này, chỉ có hai truy vấn sẽ được thực thi - một truy vấn để truy xuất tất cả sách và một truy vấn để truy xuất tất cả tác giả của tất cả sách
hasOne[Phone::class];
}
}
01Háo hức tải nhiều mối quan hệ
Đôi khi bạn có thể cần háo hức tải một số mối quan hệ khác nhau. Để làm như vậy, chỉ cần chuyển một mảng các mối quan hệ cho phương thức
hasOne[Phone::class];
}
}
532hasOne[Phone::class];
}
}
02Đang tải háo hức lồng nhau
Để háo hức tải các mối quan hệ của một mối quan hệ, bạn có thể sử dụng cú pháp "chấm". Ví dụ: hãy háo hức tải tất cả các tác giả của cuốn sách và tất cả các địa chỉ liên hệ cá nhân của tác giả
hasOne[Phone::class];
}
}
03Đang tải háo hức lồng nhau {{$rapport->Rapport->nom}}
823 Mối quan hệ
{{$rapport->Rapport->nom}}
Nếu bạn muốn háo hức tải một mối quan hệ
{{$rapport->Rapport->nom}}
823, cũng như các mối quan hệ lồng nhau trên các thực thể khác nhau có thể được trả về bởi mối quan hệ đó, bạn có thể sử dụng phương thức hasOne[Phone::class];
}
}
532 kết hợp với phương thức hasOne[Phone::class];
}
}
561 của mối quan hệ {{$rapport->Rapport->nom}}
823. Để giúp minh họa phương pháp này, hãy xem xét mô hình sauhasOne[Phone::class];
}
}
04Trong ví dụ này, giả sử các mô hình
hasOne[Phone::class];
}
}
562, hasOne[Phone::class];
}
}
535 và hasOne[Phone::class];
}
}
87 có thể tạo ra các mô hình hasOne[Phone::class];
}
}
537. Ngoài ra, giả sử rằng các mô hình hasOne[Phone::class];
}
}
562 thuộc về một mô hình hasOne[Phone::class];
}
}
567, các mô hình hasOne[Phone::class];
}
}
535 được liên kết với các mô hình {{$rapport->Rapport->nom}}
853 và các mô hình hasOne[Phone::class];
}
}
87 thuộc về một mô hình hasOne[Phone::class];
}
}
554Sử dụng các định nghĩa và mối quan hệ mô hình này, chúng tôi có thể truy xuất các phiên bản mô hình
hasOne[Phone::class];
}
}
537 và háo hức tải tất cả các mô hình hasOne[Phone::class];
}
}
539 và các mối quan hệ lồng nhau tương ứng của chúnghasOne[Phone::class];
}
}
05Háo hức tải các cột cụ thể
Bạn có thể không phải lúc nào cũng cần mọi cột từ các mối quan hệ mà bạn đang truy xuất. Vì lý do này, Eloquent cho phép bạn chỉ định cột nào của mối quan hệ mà bạn muốn truy xuất
hasOne[Phone::class];
}
}
06Ghi chú. Khi sử dụng tính năng này, bạn phải luôn bao gồm cột
52 và mọi cột khóa ngoại có liên quan trong danh sách các cột bạn muốn truy xuấthasOne[Phone::class]; } }
Háo hức tải theo mặc định
Đôi khi bạn có thể muốn luôn tải một số mối quan hệ khi truy xuất một mô hình. Để thực hiện điều này, bạn có thể xác định thuộc tính
hasOne[Phone::class];
}
}
575 trên mô hìnhhasOne[Phone::class];
}
}
07Nếu bạn muốn xóa một mục khỏi thuộc tính
hasOne[Phone::class];
}
}
575 cho một truy vấn, bạn có thể sử dụng phương pháp hasOne[Phone::class];
}
}
577hasOne[Phone::class];
}
}
08Nếu bạn muốn ghi đè tất cả các mục trong thuộc tính
hasOne[Phone::class];
}
}
575 cho một truy vấn, bạn có thể sử dụng phương pháp hasOne[Phone::class];
}
}
579hasOne[Phone::class];
}
}
09Hạn chế tải háo hức
Đôi khi bạn có thể muốn tải một mối quan hệ háo hức nhưng cũng chỉ định các điều kiện truy vấn bổ sung cho truy vấn tải háo hức. Bạn có thể thực hiện việc này bằng cách chuyển một mảng các mối quan hệ tới phương thức
hasOne[Phone::class];
}
}
532 trong đó khóa mảng là tên mối quan hệ và giá trị mảng là một bao đóng có thêm các ràng buộc bổ sung cho truy vấn tải háo hứchasOne[Phone::class];
}
}
10Trong ví dụ này, Eloquent sẽ chỉ háo hức tải các bài đăng trong đó cột
hasOne[Phone::class];
}
}
581 của bài đăng chứa từ hasOne[Phone::class];
}
}
582. Bạn có thể gọi các phương thức xây dựng truy vấn khác để tùy chỉnh thêm hoạt động tải háo hứchasOne[Phone::class];
}
}
11Ghi chú. Không thể sử dụng các phương thức trình tạo truy vấn
583 vàhasOne[Phone::class]; } }
584 khi hạn chế tải háo hứchasOne[Phone::class]; } }
Hạn chế tải háo hức của các mối quan hệ {{$rapport->Rapport->nom}}
823
{{$rapport->Rapport->nom}}
Nếu bạn muốn tải một mối quan hệ
{{$rapport->Rapport->nom}}
823, Eloquent sẽ chạy nhiều truy vấn để tìm nạp từng loại mô hình có liên quan. Bạn có thể thêm các ràng buộc bổ sung cho mỗi truy vấn này bằng cách sử dụng phương thức hasOne[Phone::class];
}
}
588 của quan hệ hasOne[Phone::class];
}
}
587hasOne[Phone::class];
}
}
12Trong ví dụ này, Eloquent sẽ chỉ háo hức tải các bài đăng chưa bị ẩn và video có giá trị "giáo dục"
hasOne[Phone::class];
}
}
589Háo hức tải lười biếng
Đôi khi bạn có thể cần háo hức tải một mối quan hệ sau khi mô hình gốc đã được truy xuất. Ví dụ: điều này có thể hữu ích nếu bạn cần tự động quyết định có tải các mô hình liên quan hay không
hasOne[Phone::class];
}
}
13Nếu bạn cần đặt các ràng buộc truy vấn bổ sung cho truy vấn tải háo hức, bạn có thể chuyển một mảng được khóa bởi các mối quan hệ mà bạn muốn tải. Các giá trị mảng phải là các phiên bản đóng nhận phiên bản truy vấn
hasOne[Phone::class];
}
}
14Để chỉ tải một mối quan hệ khi nó chưa được tải, hãy sử dụng phương pháp
hasOne[Phone::class];
}
}
590hasOne[Phone::class];
}
}
15Đang tải háo hức lười biếng lồng nhau & {{$rapport->Rapport->nom}}
823
{{$rapport->Rapport->nom}}
Nếu bạn muốn háo hức tải một mối quan hệ
{{$rapport->Rapport->nom}}
823, cũng như các mối quan hệ lồng nhau trên các thực thể khác nhau có thể được trả về bởi mối quan hệ đó, bạn có thể sử dụng phương thức hasOne[Phone::class];
}
}
593Phương thức này chấp nhận tên của mối quan hệ
{{$rapport->Rapport->nom}}
823 làm đối số đầu tiên và một mảng các cặp mô hình/mối quan hệ làm đối số thứ hai. Để giúp minh họa phương pháp này, hãy xem xét mô hình sauhasOne[Phone::class];
}
}
04Trong ví dụ này, giả sử các mô hình
hasOne[Phone::class];
}
}
562, hasOne[Phone::class];
}
}
535 và hasOne[Phone::class];
}
}
87 có thể tạo ra các mô hình hasOne[Phone::class];
}
}
537. Ngoài ra, giả sử rằng các mô hình hasOne[Phone::class];
}
}
562 thuộc về một mô hình hasOne[Phone::class];
}
}
567, các mô hình hasOne[Phone::class];
}
}
535 được liên kết với các mô hình {{$rapport->Rapport->nom}}
853 và các mô hình hasOne[Phone::class];
}
}
87 thuộc về một mô hình hasOne[Phone::class];
}
}
554Sử dụng các định nghĩa và mối quan hệ mô hình này, chúng tôi có thể truy xuất các phiên bản mô hình
hasOne[Phone::class];
}
}
537 và háo hức tải tất cả các mô hình hasOne[Phone::class];
}
}
539 và các mối quan hệ lồng nhau tương ứng của chúnghasOne[Phone::class];
}
}
17Ngăn chặn Lazy Loading
Như đã thảo luận trước đây, các mối quan hệ tải háo hức thường có thể mang lại lợi ích hiệu suất đáng kể cho ứng dụng của bạn. Do đó, nếu muốn, bạn có thể hướng dẫn Laravel luôn ngăn chặn quá trình lazy loading của các quan hệ. Để thực hiện điều này, bạn có thể gọi phương thức
$user->posts[]->where['active', 1]->get[];
107 được cung cấp bởi lớp mô hình Eloquent cơ sở. Thông thường, bạn nên gọi phương thức này trong phương thức {{$rapport->Rapport->nom}}
878 của lớp $user->posts[]->where['active', 1]->get[];
109 của ứng dụng của bạnPhương thức
$user->posts[]->where['active', 1]->get[];
107 chấp nhận một đối số boolean tùy chọn cho biết liệu có nên ngăn tải lười biếng hay không. Ví dụ: bạn có thể chỉ muốn tắt tính năng tải chậm trong môi trường phi sản xuất để môi trường sản xuất của bạn sẽ tiếp tục hoạt động bình thường ngay cả khi mối quan hệ tải chậm vô tình xuất hiện trong mã sản xuấthasOne[Phone::class];
}
}
18Sau khi ngăn chặn lazy loading, Eloquent sẽ đưa ra một ngoại lệ
$user->posts[]->where['active', 1]->get[];
111 khi ứng dụng của bạn cố gắng lazy load bất kỳ mối quan hệ Eloquent nàoBạn có thể tùy chỉnh hành vi vi phạm tải chậm bằng phương pháp
$user->posts[]->where['active', 1]->get[];
112. Ví dụ: sử dụng phương pháp này, bạn có thể hướng dẫn các vi phạm tải chậm chỉ được ghi lại thay vì làm gián đoạn quá trình thực thi của ứng dụng với các ngoại lệhasOne[Phone::class];
}
}
19Chèn và cập nhật các mô hình liên quan
Phương pháp $user->posts[]->where['active', 1]->get[];
113
$user->posts[]->where['active', 1]->get[];
Eloquent cung cấp các phương thức thuận tiện để thêm các mô hình mới vào các mối quan hệ. Ví dụ: có lẽ bạn cần thêm nhận xét mới vào bài đăng. Thay vì đặt thủ công thuộc tính
hasOne[Phone::class];
}
}
79 trên mô hình hasOne[Phone::class];
}
}
76, bạn có thể chèn nhận xét bằng phương pháp $user->posts[]->where['active', 1]->get[];
113 của mối quan hệhasOne[Phone::class];
}
}
20Lưu ý rằng chúng tôi không truy cập mối quan hệ
hasOne[Phone::class];
}
}
80 dưới dạng thuộc tính động. Thay vào đó, chúng tôi đã gọi phương thức hasOne[Phone::class];
}
}
80 để lấy một thể hiện của mối quan hệ. Phương pháp $user->posts[]->where['active', 1]->get[];
113 sẽ tự động thêm giá trị hasOne[Phone::class];
}
}
79 phù hợp vào mô hình hasOne[Phone::class];
}
}
76 mớiNếu bạn cần lưu nhiều mô hình liên quan, bạn có thể sử dụng phương pháp
$user->posts[]->where['active', 1]->get[];
122hasOne[Phone::class];
}
}
21Các phương thức
$user->posts[]->where['active', 1]->get[];
113 và $user->posts[]->where['active', 1]->get[];
122 sẽ duy trì các phiên bản mô hình nhất định, nhưng sẽ không thêm các mô hình mới được duy trì vào bất kỳ mối quan hệ trong bộ nhớ nào đã được tải lên mô hình gốc. Nếu bạn dự định truy cập vào mối quan hệ sau khi sử dụng các phương pháp $user->posts[]->where['active', 1]->get[];
113 hoặc $user->posts[]->where['active', 1]->get[];
122, bạn có thể sử dụng phương pháp $user->posts[]->where['active', 1]->get[];
127 để tải lại mô hình và các mối quan hệ của nóhasOne[Phone::class];
}
}
22Lưu đệ quy các mô hình & mối quan hệ
Nếu bạn muốn
$user->posts[]->where['active', 1]->get[];
113 mô hình của mình và tất cả các mối quan hệ liên quan của nó, bạn có thể sử dụng phương pháp $user->posts[]->where['active', 1]->get[];
129. Trong ví dụ này, mô hình hasOne[Phone::class];
}
}
87 sẽ được lưu cũng như các bình luận của nó và tác giả của bình luậnhasOne[Phone::class];
}
}
23Phương pháp $user->posts[]->where['active', 1]->get[];
131
$user->posts[]->where['active', 1]->get[];
Ngoài các phương thức
$user->posts[]->where['active', 1]->get[];
113 và $user->posts[]->where['active', 1]->get[];
122, bạn cũng có thể sử dụng phương thức $user->posts[]->where['active', 1]->get[];
131, phương thức này chấp nhận một mảng các thuộc tính, tạo một mô hình và chèn nó vào cơ sở dữ liệu. Sự khác biệt giữa $user->posts[]->where['active', 1]->get[];
113 và $user->posts[]->where['active', 1]->get[];
131 là $user->posts[]->where['active', 1]->get[];
113 chấp nhận một phiên bản mô hình Eloquent đầy đủ trong khi $user->posts[]->where['active', 1]->get[];
131 chấp nhận một PHP $user->posts[]->where['active', 1]->get[];
139 đơn giản. Mô hình mới được tạo sẽ được trả về bằng phương thức $user->posts[]->where['active', 1]->get[];
131hasOne[Phone::class];
}
}
24Bạn có thể sử dụng phương pháp
$user->posts[]->where['active', 1]->get[];
141 để tạo nhiều mô hình liên quanhasOne[Phone::class];
}
}
25Bạn cũng có thể sử dụng các phương pháp
$user->posts[]->where['active', 1]->get[];
142, $user->posts[]->where['active', 1]->get[];
143, $user->posts[]->where['active', 1]->get[];
144 và $user->posts[]->where['active', 1]->get[];
145 đểMẹo. Trước khi sử dụng phương pháp
131, hãy nhớ xem lại tài liệu$user->posts[]->where['active', 1]->get[];
Thuộc về các mối quan hệ
Nếu bạn muốn gán model con cho model gốc mới, bạn có thể sử dụng phương thức
$user->posts[]->where['active', 1]->get[];
147. Trong ví dụ này, mô hình hasOne[Phone::class];
}
}
40 xác định mối quan hệ hasOne[Phone::class];
}
}
62 với mô hình $user->posts[]->where['active', 1]->get[];
150. Phương thức $user->posts[]->where['active', 1]->get[];
147 này sẽ đặt khóa ngoại trên mô hình conhasOne[Phone::class];
}
}
26Để xóa mô hình gốc khỏi mô hình con, bạn có thể sử dụng phương pháp
$user->posts[]->where['active', 1]->get[];
152. Phương pháp này sẽ đặt khóa ngoại của mối quan hệ thành {{$rapport->Rapport->nom}}
402hasOne[Phone::class];
}
}
27Nhiều đến nhiều mối quan hệ
Gắn / Tháo
Eloquent cũng cung cấp các phương thức giúp làm việc với mối quan hệ nhiều-nhiều thuận tiện hơn. Ví dụ: hãy tưởng tượng một người dùng có thể có nhiều vai trò và một vai trò có thể có nhiều người dùng. Bạn có thể sử dụng phương pháp
$user->posts[]->where['active', 1]->get[];
154 để gắn vai trò cho người dùng bằng cách chèn bản ghi vào bảng trung gian của mối quan hệhasOne[Phone::class];
}
}
28Khi đính kèm một mối quan hệ vào một mô hình, bạn cũng có thể chuyển một mảng dữ liệu bổ sung để chèn vào bảng trung gian
hasOne[Phone::class];
}
}
29Đôi khi có thể cần phải xóa vai trò khỏi người dùng. Để xóa bản ghi mối quan hệ nhiều-nhiều, hãy sử dụng phương pháp
$user->posts[]->where['active', 1]->get[];
155. Phương thức $user->posts[]->where['active', 1]->get[];
155 sẽ xóa bản ghi thích hợp ra khỏi bảng trung gian; hasOne[Phone::class];
}
}
30Để thuận tiện,
$user->posts[]->where['active', 1]->get[];
154 và $user->posts[]->where['active', 1]->get[];
155 cũng chấp nhận mảng ID làm đầu vàohasOne[Phone::class];
}
}
31Hiệp hội đồng bộ hóa
Bạn cũng có thể sử dụng phương pháp
$user->posts[]->where['active', 1]->get[];
159 để xây dựng các liên kết nhiều-nhiều. Phương thức $user->posts[]->where['active', 1]->get[];
159 chấp nhận một mảng ID để đặt trên bảng trung gian. Bất kỳ ID nào không có trong mảng đã cho sẽ bị xóa khỏi bảng trung gian. Vì vậy, sau khi thao tác này hoàn tất, chỉ các ID trong mảng đã cho sẽ tồn tại trong bảng trung gianhasOne[Phone::class];
}
}
32Bạn cũng có thể chuyển các giá trị bảng trung gian bổ sung bằng ID
hasOne[Phone::class];
}
}
33Nếu bạn muốn chèn các giá trị bảng trung gian giống nhau với từng ID mô hình được đồng bộ hóa, bạn có thể sử dụng phương pháp
$user->posts[]->where['active', 1]->get[];
161hasOne[Phone::class];
}
}
34Nếu bạn không muốn tách các ID hiện có bị thiếu khỏi mảng đã cho, bạn có thể sử dụng phương thức
$user->posts[]->where['active', 1]->get[];
162hasOne[Phone::class];
}
}
35Chuyển đổi hiệp hội
Mối quan hệ nhiều-nhiều cũng cung cấp một phương thức
$user->posts[]->where['active', 1]->get[];
163 để "chuyển đổi" trạng thái tệp đính kèm của các ID mô hình có liên quan đã cho. Nếu ID đã cho hiện đang được đính kèm, nó sẽ bị tách ra. Tương tự như vậy, nếu nó hiện đang được tách ra, nó sẽ được gắn vàohasOne[Phone::class];
}
}
36Cập nhật một bản ghi trên bảng trung gian
Nếu bạn cần cập nhật một hàng hiện có trong bảng trung gian của mối quan hệ của mình, bạn có thể sử dụng phương pháp
$user->posts[]->where['active', 1]->get[];
164. Phương thức này chấp nhận khóa ngoại của bản ghi trung gian và một mảng các thuộc tính để cập nhậthasOne[Phone::class];
}
}
37Chạm vào dấu thời gian của phụ huynh
Khi một mô hình xác định mối quan hệ của
hasOne[Phone::class];
}
}
62 hoặc {{$rapport->Rapport->nom}}
458 với một mô hình khác, chẳng hạn như một hasOne[Phone::class];
}
}
76 thuộc về một hasOne[Phone::class];
}
}
87, đôi khi sẽ rất hữu ích khi cập nhật dấu thời gian của cha mẹ khi mô hình con được cập nhậtVí dụ: khi mô hình
hasOne[Phone::class];
}
}
76 được cập nhật, bạn có thể muốn tự động "chạm" dấu thời gian {{$rapport->Rapport->nom}}
480 của hasOne[Phone::class];
}
}
87 sở hữu để nó được đặt thành ngày và giờ hiện tại. Để thực hiện điều này, bạn có thể thêm thuộc tính $user->posts[]->where['active', 1]->get[];
172 vào mô hình con của mình có chứa tên của các mối quan hệ sẽ được cập nhật dấu thời gian {{$rapport->Rapport->nom}}
480 khi mô hình con được cập nhậthasOne[Phone::class];
}
}
2Ghi chú. Dấu thời gian của mô hình gốc sẽ chỉ được cập nhật nếu mô hình con được cập nhật bằng phương pháp
113 của Eloquent$user->posts[]->where['active', 1]->get[];