Trong bài đăng này, tôi sẽ chỉ cho bạn một ví dụ về cách triển khai bằng cách sử dụng Laravel 9 trên Cập nhật mô hình hiện có. Laravel model update là một trong những chức năng mà chúng ta nên học nhất khi tạo ứng dụng bằng Laravel. Trong bài đăng này, chúng tôi có các phương pháp và ví dụ khác nhau về cách thực hiện. Chỉ cần chọn một cái phù hợp với nhu cầu của bạn
Ví dụ 1
$employee = Employee::find[1];
$employee->name = "Juan Dela Cruz";
$employee->save[];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Ví dụ #2
Chúng tôi cũng có thể cập nhật mô hình bằng cách sử dụng một mảng có nhiều giá trị mà không cần sử dụng phương thức
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
53$employee = Employee::find[1];
$employee->update[['name' => 'Juan Dela Cruz', 'address' => 'My address']];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Ví dụ #3
Chúng tôi cũng có thể cập nhật bản ghi bằng phương pháp có điều kiện bằng cách sử dụng trực tiếp hàm
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
54Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Ví dụ #4
Nếu bạn không cần thay đổi cột
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
55 khi cập nhật bản ghi, bạn có thể sử dụng tùy chọn $employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
56 thành $employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
57 để mô hình sẽ loại trừ nó$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Tôi hy vọng hướng dẫn này có thể giúp bạn. Vui lòng truy cập tại đây https. // triển khai mã. com/blog/laravel/laravel-9-update-an-current-model nếu bạn muốn tải mã này
Hôm nay mình muốn hướng dẫn các bạn cập nhật nhiều dữ liệu trong laravel. Bài viết này sẽ triển khai cập nhật laravel cho nhiều bản ghi theo id. Mình xin chia sẻ bản cập nhật laravel nhiều hàng 1 mảng. Bài viết này sẽ đưa ra một ví dụ đơn giản về cập nhật nhiều dữ liệu trong laravel. Ở đây, Tạo một ví dụ cơ bản về cách cập nhật nhiều bản ghi trong laravel
Bạn có thể sử dụng ví dụ này với các phiên bản laravel 6, laravel 7, laravel 8 và laravel 9
Nếu bạn muốn cập nhật nhiều hàng trong laravel eloquent thì bạn có thể sử dụng where[] với update[], whereIn[] với update[] phương thức của eloquent. Tôi đã thêm ba ví dụ đơn giản để cập nhật nhiều sản phẩm trong laravel eloquent. vì vậy hãy xem ví dụ từng cái một
Eloquent ORM đi kèm với Laravel cung cấp triển khai ActiveRecord đơn giản, đẹp mắt để làm việc với cơ sở dữ liệu của bạn. Mỗi bảng cơ sở dữ liệu có một "Mô hình" tương ứng được sử dụng để tương tác với bảng đó
Trước khi bắt đầu, hãy đảm bảo định cấu hình kết nối cơ sở dữ liệu trong
class User extends Eloquent {
protected $table = 'my_users';
13Sử dụng cơ bản
Để bắt đầu, hãy tạo một mô hình Eloquent. Các mô hình thường nằm trong thư mục
class User extends Eloquent {
protected $table = 'my_users';
14, nhưng bạn có thể tự do đặt chúng ở bất kỳ đâu có thể được tải tự động theo tệp class User extends Eloquent {
protected $table = 'my_users';
15 của bạnXác định một mô hình hùng hồn
class User extends Eloquent {}
Lưu ý rằng chúng tôi đã không cho Eloquent biết bảng nào sẽ được sử dụng cho mô hình
class User extends Eloquent {
protected $table = 'my_users';
16 của chúng tôi. 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. Vì vậy, trong trường hợp này, Eloquent sẽ giả sử mô hình class User extends Eloquent {
protected $table = 'my_users';
16 lưu trữ các bản ghi trong bảng class User extends Eloquent {
protected $table = 'my_users';
18. Bạn có thể chỉ định một bảng tùy chỉnh bằng cách xác định thuộc tính class User extends Eloquent {
protected $table = 'my_users';
19 trên mô hình của mìnhclass User extends Eloquent {
protected $table = 'my_users';
Ghi chú. Eloquent cũng sẽ giả định rằng mỗi bảng có một cột khóa chính tên là
20. Bạn có thể xác định thuộc tính
class User extends Eloquent {
protected $table = 'my_users';
21 để ghi đè quy ước này. Tương tự như vậy, bạn có thể xác định thuộc tính
class User extends Eloquent {
protected $table = 'my_users';
22 để ghi đè tên của kết nối cơ sở dữ liệu sẽ được sử dụng khi sử dụng mô hình
class User extends Eloquent {
protected $table = 'my_users';
Khi một mô hình được xác định, bạn đã sẵn sàng bắt đầu truy xuất và tạo các bản ghi trong bảng của mình. Lưu ý rằng bạn sẽ cần đặt các cột
class User extends Eloquent {
protected $table = 'my_users';
23 và class User extends Eloquent {
protected $table = 'my_users';
24 trên bảng của mình theo mặc định. Nếu bạn không muốn các cột này được duy trì tự động, hãy đặt thuộc tính class User extends Eloquent {
protected $table = 'my_users';
25 trên mô hình của bạn thành class User extends Eloquent {
protected $table = 'my_users';
26Lấy tất cả các mô hình
Truy xuất bản ghi bằng khóa chính
Ghi chú. Tất cả các phương thức có sẵn trên trình tạo truy vấn cũng có sẵn khi truy vấn các mô hình Eloquent
Truy xuất một mô hình bằng khóa chính hoặc ném một ngoại lệ
Đôi khi, bạn có thể muốn đưa ra một ngoại lệ nếu không tìm thấy mô hình, cho phép bạn bắt các ngoại lệ bằng cách sử dụng trình xử lý
class User extends Eloquent {
protected $table = 'my_users';
27 và hiển thị trang 404Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
1Để đăng ký trình xử lý lỗi, hãy lắng nghe
class User extends Eloquent {
protected $table = 'my_users';
28Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
3Truy vấn bằng Eloquent Models
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
4uẩn hùng hồn
Tất nhiên, bạn cũng có thể sử dụng các hàm tổng hợp của trình tạo truy vấn
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
5Nếu bạn không thể tạo truy vấn mình cần thông qua giao diện trôi chảy, vui lòng sử dụng
class User extends Eloquent {
protected $table = 'my_users';
29Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
7Kết quả Chunking
Nếu bạn cần xử lý nhiều [hàng nghìn] bản ghi Eloquent, sử dụng lệnh
class User extends Eloquent {
protected $table = 'my_users';
30 sẽ cho phép bạn thực hiện mà không ngốn hết RAMEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
9Đối số đầu tiên được truyền cho phương thức là số lượng bản ghi bạn muốn nhận trên mỗi "khối". Đóng được chuyển thành đối số thứ hai sẽ được gọi cho mỗi đoạn được lấy từ cơ sở dữ liệu
Chỉ định kết nối truy vấn
Bạn cũng có thể chỉ định kết nối cơ sở dữ liệu nào sẽ được sử dụng khi chạy truy vấn Eloquent. Đơn giản chỉ cần sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
31$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
1chuyển nhượng hàng loạt
Khi tạo một mô hình mới, bạn chuyển một mảng các thuộc tính cho hàm tạo mô hình. Các thuộc tính này sau đó được gán cho mô hình thông qua gán hàng loạt. Điều này là thuận tiện; . Nếu đầu vào của người dùng được đưa vào một mô hình một cách mù quáng, thì người dùng có thể tự do sửa đổi bất kỳ và tất cả các thuộc tính của mô hình. Vì lý do này, tất cả các mẫu Eloquent đều mặc định bảo vệ chống lại việc gán hàng loạt
Để bắt đầu, hãy đặt thuộc tính
class User extends Eloquent {
protected $table = 'my_users';
32 hoặc class User extends Eloquent {
protected $table = 'my_users';
33 trên mô hình của bạnXác định các thuộc tính có thể điền vào một mô hình
Thuộc tính
class User extends Eloquent {
protected $table = 'my_users';
32 chỉ định thuộc tính nào có thể gán hàng loạt. Điều này có thể được đặt ở cấp lớp hoặc cấp độ cá thể$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
5Trong ví dụ này, chỉ có ba thuộc tính được liệt kê là có thể gán hàng loạt
Xác định các thuộc tính được bảo vệ trên một mô hình
Nghịch đảo của
class User extends Eloquent {
protected $table = 'my_users';
32 là class User extends Eloquent {
protected $table = 'my_users';
33 và đóng vai trò là "danh sách đen" thay vì "danh sách trắng"class User extends Eloquent {
protected $table = 'my_users';
0Ghi chú. Khi sử dụng
33, bạn vẫn không bao giờ được chuyển
class User extends Eloquent {
protected $table = 'my_users';
38 hoặc bất kỳ mảng thô nào của đầu vào do người dùng kiểm soát vào phương thức
class User extends Eloquent {
protected $table = 'my_users';
39 hoặc
class User extends Eloquent {
protected $table = 'my_users';
40, vì bất kỳ cột nào không được bảo vệ đều có thể được cập nhật
class User extends Eloquent {
protected $table = 'my_users';
Chặn tất cả các thuộc tính từ chuyển nhượng hàng loạt
Trong ví dụ trên, các thuộc tính
class User extends Eloquent {
protected $table = 'my_users';
20 và class User extends Eloquent {
protected $table = 'my_users';
42 có thể không được gán hàng loạt. Tất cả các thuộc tính khác sẽ được gán hàng loạt. Bạn cũng có thể chặn tất cả các thuộc tính khỏi gán hàng loạt bằng cách sử dụng thuộc tính bảo vệclass User extends Eloquent {
protected $table = 'my_users';
1Chèn, cập nhật, xóa
Để tạo một bản ghi mới trong cơ sở dữ liệu từ một mô hình, chỉ cần tạo một phiên bản mô hình mới và gọi phương thức
class User extends Eloquent {
protected $table = 'my_users';
39Lưu một mô hình mới
Ghi chú. Thông thường, các mẫu Eloquent của bạn sẽ có các phím tăng tự động. Tuy nhiên, nếu bạn muốn chỉ định khóa của riêng mình, hãy đặt thuộc tính
44 trên mô hình của bạn thành
class User extends Eloquent {
protected $table = 'my_users';
26
class User extends Eloquent {
protected $table = 'my_users';
Bạn cũng có thể sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
46 để lưu một mô hình mới trong một dòng. Phiên bản mô hình được chèn sẽ được trả về cho bạn từ phương thức. Tuy nhiên, trước khi làm như vậy, bạn cần chỉ định thuộc tính class User extends Eloquent {
protected $table = 'my_users';
32 hoặc class User extends Eloquent {
protected $table = 'my_users';
33 trên mô hình, vì tất cả các mô hình Eloquent đều bảo vệ chống lại việc gán hàng loạtSau khi lưu hoặc tạo một mô hình mới sử dụng ID tăng tự động, bạn có thể truy xuất ID bằng cách truy cập thuộc tính
class User extends Eloquent {
protected $table = 'my_users';
20 của đối tượngĐặt các thuộc tính được bảo vệ trên mô hình
class User extends Eloquent {
protected $table = 'my_users';
2Sử dụng phương pháp tạo mô hình
class User extends Eloquent {
protected $table = 'my_users';
3Cập nhật mô hình đã truy xuất
Để cập nhật một mô hình, bạn có thể truy xuất nó, thay đổi một thuộc tính và sử dụng phương thức
class User extends Eloquent {
protected $table = 'my_users';
39Lưu một mô hình và các mối quan hệ
Đôi khi bạn có thể muốn lưu không chỉ một mô hình mà còn tất cả các mối quan hệ của nó. Để làm như vậy, bạn có thể sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
51Bạn cũng có thể chạy các bản cập nhật dưới dạng truy vấn đối với một tập hợp các mô hình
class User extends Eloquent {
protected $table = 'my_users';
4Ghi chú. Không có sự kiện mô hình nào được kích hoạt khi cập nhật một tập hợp các mô hình thông qua trình tạo truy vấn Eloquent
Xóa một mô hình hiện có
Để xóa một mô hình, chỉ cần gọi phương thức
class User extends Eloquent {
protected $table = 'my_users';
52 trên ví dụXóa một mô hình hiện có bằng khóa
class User extends Eloquent {
protected $table = 'my_users';
5Tất nhiên, bạn cũng có thể chạy truy vấn xóa trên một tập hợp các mô hình
class User extends Eloquent {
protected $table = 'my_users';
6Chỉ cập nhật Dấu thời gian của Người mẫu
Nếu bạn chỉ muốn cập nhật dấu thời gian trên một mô hình, bạn có thể sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
53Xóa mềm
Khi xóa mềm một mô hình, nó không thực sự bị xóa khỏi cơ sở dữ liệu của bạn. Thay vào đó, dấu thời gian
class User extends Eloquent {
protected $table = 'my_users';
54 được đặt trên bản ghi. Để kích hoạt xóa mềm cho một mô hình, hãy áp dụng class User extends Eloquent {
protected $table = 'my_users';
55 cho mô hìnhclass User extends Eloquent {
protected $table = 'my_users';
7Để thêm cột
class User extends Eloquent {
protected $table = 'my_users';
54 vào bảng của bạn, bạn có thể sử dụng phương pháp class User extends Eloquent {
protected $table = 'my_users';
57 từ quá trình di chuyểnBây giờ, khi bạn gọi phương thức
class User extends Eloquent {
protected $table = 'my_users';
52 trên mô hình, cột class User extends Eloquent {
protected $table = 'my_users';
54 sẽ được đặt thành dấu thời gian hiện tại. Khi truy vấn một mô hình sử dụng xóa mềm, các mô hình "đã xóa" sẽ không được đưa vào kết quả truy vấnBuộc các mô hình đã xóa mềm vào kết quả
Để buộc các mô hình đã xóa mềm xuất hiện trong tập kết quả, hãy sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
60 trên truy vấnclass User extends Eloquent {
protected $table = 'my_users';
8Phương pháp
class User extends Eloquent {
protected $table = 'my_users';
60 có thể được sử dụng trên một mối quan hệ xác địnhclass User extends Eloquent {
protected $table = 'my_users';
9Nếu bạn chỉ muốn nhận các mô hình đã xóa mềm trong kết quả của mình, bạn có thể sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
62Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
10Để khôi phục mô hình đã xóa mềm về trạng thái hoạt động, hãy sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
63Bạn cũng có thể sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
63 trên một truy vấnEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
11Giống như với
class User extends Eloquent {
protected $table = 'my_users';
60, phương pháp class User extends Eloquent {
protected $table = 'my_users';
63 cũng có thể được sử dụng trên các mối quan hệEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
12Nếu bạn thực sự muốn xóa một mô hình khỏi cơ sở dữ liệu, bạn có thể sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
67Phương pháp
class User extends Eloquent {
protected $table = 'my_users';
67 cũng hoạt động trên các mối quan hệEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
13Để xác định xem một phiên bản mô hình nhất định đã bị xóa mềm hay chưa, bạn có thể sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
69Dấu thời gian
Theo mặc định, Eloquent sẽ tự động duy trì các cột
class User extends Eloquent {
protected $table = 'my_users';
24 và class User extends Eloquent {
protected $table = 'my_users';
23 trên bảng cơ sở dữ liệu của bạn. Chỉ cần thêm các cột class User extends Eloquent {
protected $table = 'my_users';
72 này vào bảng của bạn và Eloquent sẽ lo phần còn lại. Nếu bạn không muốn Eloquent duy trì các cột này, hãy thêm thuộc tính sau vào mô hình của bạnVô hiệu hóa dấu thời gian tự động
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
14Cung cấp định dạng dấu thời gian tùy chỉnh
Nếu bạn muốn tùy chỉnh định dạng dấu thời gian của mình, bạn có thể ghi đè phương thức
class User extends Eloquent {
protected $table = 'my_users';
73 trong mô hình của mìnhEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
15Phạm vi truy vấn
Xác định phạm vi truy vấn
Phạm vi cho phép bạn dễ dàng sử dụng lại logic truy vấn trong các mô hình của mình. Để xác định phạm vi, chỉ cần thêm tiền tố vào một phương thức mô hình bằng
class User extends Eloquent {
protected $table = 'my_users';
74Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
16Sử dụng phạm vi truy vấn
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
17Phạm vi động
Đôi khi bạn có thể muốn xác định một phạm vi chấp nhận các tham số. Chỉ cần thêm các tham số của bạn vào chức năng phạm vi của bạn
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
18Sau đó truyền tham số vào cuộc gọi phạm vi
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
19Phạm vi toàn cầu
Đôi khi bạn có thể muốn xác định phạm vi áp dụng cho tất cả các truy vấn được thực hiện trên một mô hình. Về bản chất, đây là cách hoạt động của tính năng "xóa mềm" của Eloquent. Phạm vi toàn cầu được xác định bằng cách sử dụng kết hợp các đặc điểm PHP và triển khai
class User extends Eloquent {
protected $table = 'my_users';
75Đầu tiên, hãy xác định một đặc điểm. Đối với ví dụ này, chúng tôi sẽ sử dụng
class User extends Eloquent {
protected $table = 'my_users';
55 đi kèm với LaravelEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
30Nếu một mô hình Eloquent sử dụng một đặc điểm có phương thức phù hợp với quy ước đặt tên
class User extends Eloquent {
protected $table = 'my_users';
77, thì phương thức đặc điểm đó sẽ được gọi khi mô hình Eloquent được khởi động, giúp bạn có cơ hội đăng ký phạm vi toàn cầu hoặc thực hiện bất kỳ điều gì khác mà bạn muốn. Phạm vi phải triển khai class User extends Eloquent {
protected $table = 'my_users';
78, chỉ định hai phương thức. class User extends Eloquent {
protected $table = 'my_users';
79 và class User extends Eloquent {
protected $table = 'my_users';
80Phương thức
class User extends Eloquent {
protected $table = 'my_users';
79 nhận một đối tượng xây dựng truy vấn class User extends Eloquent {
protected $table = 'my_users';
82 và chịu trách nhiệm thêm bất kỳ mệnh đề class User extends Eloquent {
protected $table = 'my_users';
83 bổ sung nào mà phạm vi muốn thêm vào. Phương thức class User extends Eloquent {
protected $table = 'my_users';
80 cũng nhận một đối tượng class User extends Eloquent {
protected $table = 'my_users';
85 và chịu trách nhiệm đảo ngược hành động được thực hiện bởi class User extends Eloquent {
protected $table = 'my_users';
79. Nói cách khác, class User extends Eloquent {
protected $table = 'my_users';
80 nên xóa mệnh đề class User extends Eloquent {
protected $table = 'my_users';
83 [hoặc bất kỳ mệnh đề nào khác] đã được thêm vào. Vì vậy, đối với class User extends Eloquent {
protected $table = 'my_users';
89 của chúng tôi, các phương thức trông giống như thế nàyEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
31Các mối quan hệ
Tất nhiên, các bảng cơ sở dữ liệu của bạn có thể 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. Laravel hỗ trợ nhiều loại quan hệ
Một Đối Một
Xác định mối quan hệ một đối một
Mối quan hệ một đối một là một mối quan hệ rất cơ bản. Ví dụ, một mô hình
class User extends Eloquent {
protected $table = 'my_users';
16 có thể có một class User extends Eloquent {
protected $table = 'my_users';
91. Chúng ta có thể định nghĩa mối quan hệ này trong EloquentEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
32Đối số đầu tiên được truyền cho phương thức
class User extends Eloquent {
protected $table = 'my_users';
92 là tên của mô hình liên quan. Khi mối quan hệ được xác định, chúng tôi có thể truy xuất nó bằng Eloquent'sEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
33SQL được thực hiện bởi câu lệnh này sẽ như sau
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
34Lưu ý rằng Eloquent giả định khóa ngoại của mối quan hệ dựa trên tên mô hình. Trong trường hợp này, mô hình
class User extends Eloquent {
protected $table = 'my_users';
91 được giả sử sử dụng khóa ngoại class User extends Eloquent {
protected $table = 'my_users';
94. 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 class User extends Eloquent {
protected $table = 'my_users';
92. Hơn nữa, bạn có thể chuyển đối số thứ ba cho phương thức để chỉ định cột cục bộ nào sẽ được sử dụng cho liên kếtEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
35Xác định nghịch đảo của một mối quan hệ
Để xác định nghịch đảo của mối quan hệ trên mô hình
class User extends Eloquent {
protected $table = 'my_users';
91, chúng tôi sử dụng phương pháp class User extends Eloquent {
protected $table = 'my_users';
97Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
36Trong ví dụ trên, Eloquent sẽ tìm cột
class User extends Eloquent {
protected $table = 'my_users';
94 trên bảng class User extends Eloquent {
protected $table = 'my_users';
99. Nếu bạn muốn xác định một cột khóa ngoại khác, bạn có thể chuyển nó làm đối số thứ hai cho phương thức class User extends Eloquent {
protected $table = 'my_users';
97Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
37Ngoài ra, bạn chuyển tham số thứ ba chỉ định tên của cột được liên kết trên bảng cha
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
38một đến nhiều
Một ví dụ về mối quan hệ một-nhiều là một bài đăng trên blog "có nhiều" nhận xét. Chúng ta có thể mô hình hóa mối quan hệ này như vậy
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
39Bây giờ chúng ta có thể truy cập các bình luận của bài viết thông qua
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
40Nếu bạn cần thêm các ràng buộc khác để lấy nhận xét, bạn có thể gọi phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
101 và tiếp tục xâu chuỗi các điều kiệnEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
41Một lần nữa, bạn có thể ghi đè khóa ngoại thông thường bằng cách chuyển đối số thứ hai cho phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
102. Và, giống như quan hệ class User extends Eloquent {
protected $table = 'my_users';
92, cột cục bộ cũng có thể được chỉ địnhEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
42Xác định nghịch đảo của một mối quan hệ
Để xác định nghịch đảo của mối quan hệ trên mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
104, chúng tôi sử dụng phương pháp class User extends Eloquent {
protected $table = 'my_users';
97Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
43Nhiều nhiều
Quan hệ nhiều-nhiều là loại quan hệ phức tạp hơn. Một ví dụ về mối quan hệ như vậy là một người dùng có nhiều vai trò, trong đó các vai trò này cũng được chia sẻ bởi những người dùng khác. Ví dụ: nhiều người dùng có thể có vai trò "Quản trị viên". Ba bảng cơ sở dữ liệu là cần thiết cho mối quan hệ này.
class User extends Eloquent {
protected $table = 'my_users';
18, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
107 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
108. Bảng Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
108 được lấy từ thứ tự bảng chữ cái của tên kiểu máy có liên quan và phải có các cột class User extends Eloquent {
protected $table = 'my_users';
94 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
111Chúng ta có thể định nghĩa mối quan hệ nhiều-nhiều bằng cách sử dụng phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
112Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
44Bây giờ, chúng ta có thể truy xuất các vai trò thông qua mô hình
class User extends Eloquent {
protected $table = 'my_users';
16Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
45Nếu bạn muốn sử dụng tên bảng khác thường cho bảng tổng hợp của mình, bạn có thể chuyển nó làm đối số thứ hai cho phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
112Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
46Bạn cũng có thể ghi đè các phím liên quan thông thường
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
47Tất nhiên, bạn cũng có thể xác định nghịch đảo của mối quan hệ trên mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
115Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
48Có Nhiều Thông Qua
Mối quan hệ "có nhiều thông qua" cung cấp một lối tắt 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ụ: mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
116 có thể có nhiều Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
117 đến mô hình class User extends Eloquent {
protected $table = 'my_users';
16. Các bảng cho mối quan hệ này sẽ trông như thế nàyMặc dù bảng
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
119 không chứa cột Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
120, mối quan hệ Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
121 sẽ cho phép chúng tôi truy cập các bài đăng của một quốc gia thông qua Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
122. Hãy xác định mối quan hệEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
49Nếu bạn muốn chỉ định thủ công 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
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
50quan hệ đa hình
Mối quan hệ đa hình cho phép một mô hình thuộc về nhiều mô hình khác, trên một liên kết duy nhất. Ví dụ: bạn có thể có một mẫu ảnh thuộc mẫu nhân viên hoặc mẫu đơn hàng. Chúng tôi sẽ xác định mối quan hệ này như vậy
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
51Truy xuất một quan hệ đa hình
Bây giờ, chúng tôi có thể truy xuất ảnh cho nhân viên hoặc đơn hàng
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
52Truy xuất chủ sở hữu của một quan hệ đa hình
Tuy nhiên, phép thuật "đa hình" thực sự là khi bạn truy cập nhân viên hoặc đơn đặt hàng từ mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
123Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
53Mối quan hệ
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
124 trên mô hình Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
123 sẽ trả về một phiên bản Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
126 hoặc Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
127, tùy thuộc vào loại mô hình nào sở hữu ảnhCấu trúc bảng quan hệ đa hình
Để giúp hiểu cách thức hoạt động của điều này, hãy khám phá cấu trúc cơ sở dữ liệu cho mối quan hệ đa hình
Các trường chính cần lưu ý ở đây là
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
128 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
129 trên bảng Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
130. Trong ví dụ này, ID sẽ chứa giá trị ID của nhân viên sở hữu hoặc đơn đặt hàng, trong khi loại sẽ chứa tên lớp của mô hình sở hữu. Đây là thứ cho phép ORM xác định loại mô hình sở hữu nào sẽ trả về khi truy cập vào mối quan hệ Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
124Nhiều đến nhiều quan hệ đa hình
Cấu trúc bảng quan hệ nhiều hình đa hình
Ngoài quan hệ đa hình truyền thống, bạn cũng có thể chỉ định quan hệ đa hình nhiều-nhiều. Ví dụ: mô hình blog
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
117 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
133 có thể chia sẻ mối quan hệ đa hình với mô hình Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
134. Đầu tiên, hãy kiểm tra cấu trúc bảngTiếp theo, chúng tôi đã sẵn sàng để thiết lập các mối quan hệ trên mô hình. Cả mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
117 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
133 sẽ có mối quan hệ Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
137 thông qua phương pháp Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
138Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
54Mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
134 có thể định nghĩa một phương thức cho từng mối quan hệ của nóEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
55Quan hệ truy vấn
Truy vấn quan hệ khi chọn
Khi truy cập các bản ghi cho một 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ụ: bạn muốn lấy tất cả các bài đăng trên blog có ít nhất một bình luận. Để làm như vậy, bạn có thể sử dụng phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
140Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
56Bạn cũng có thể chỉ định toán tử và số đếm
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
57Nếu bạn cần thêm sức mạnh, bạn có thể sử dụng các phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
141 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
142 để đặt điều kiện "ở đâu" cho truy vấn Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
140 của mìnhEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
58Thuộc tính động
Eloquent cho phép bạn truy cập các mối quan hệ của mình thông qua các thuộc tính động. Eloquent sẽ tự động tải mối quan hệ cho bạn và thậm chí đủ thông minh để biết nên gọi phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
144 [đối với mối quan hệ một-nhiều] hay Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
145 [đối với mối quan hệ một-đối-một]. Sau đó, nó sẽ có thể truy cập được thông qua một thuộc tính động có cùng tên với quan hệ. Ví dụ với mẫu sau Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
146Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
36Thay vì lặp lại email của người dùng như thế này
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
70Nó có thể được rút ngắn thành đơn giản
Ghi chú. Mối quan hệ trả về nhiều kết quả sẽ trả về một thể hiện của lớp
147Employee::where['salary', '>', '10000'] ->update[[ 'address' => 'Juan Dela Cruz', 'address' => 'My address' ]];
háo hức tải
Tải háo hức tồn tại để giảm bớt vấn đề truy vấn N + 1. Ví dụ: xem xét mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
148 có liên quan đến Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
149. Mối quan hệ được định nghĩa như vậyEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
71Bây giờ, hãy xem xét đoạn mã sau
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
72Vòng lặp này sẽ thực hiện 1 truy vấn để truy xuất tất cả sách trên bảng, 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ả. Vì vậy, nếu chúng ta có 25 cuốn sách, vòng lặp này sẽ chạy 26 truy vấn
Rất may, chúng tôi có thể sử dụng tải háo hức để giảm đáng kể số lượng truy vấn. Các mối quan hệ cần được tải háo hức có thể được chỉ định thông qua phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
150Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
73Trong vòng lặp trên, chỉ có hai truy vấn sẽ được thực hiện
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
74Sử dụng khôn ngoan tải háo hức có thể tăng đáng kể hiệu suất của ứng dụng của bạn
Tất nhiên, bạn có thể háo hức tải nhiều mối quan hệ cùng một lúc
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
75Bạn thậm chí có thể háo hức tải các mối quan hệ lồng nhau
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
76Trong ví dụ trên, mối quan hệ
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
151 sẽ được tải háo hức và mối quan hệ Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
152 của tác giả cũng sẽ được tảiRàng buộc tải háo hức
Đôi khi bạn có thể mong muốn tải một mối quan hệ, nhưng cũng chỉ định một điều kiện cho tải háo hức. Đây là một ví dụ
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
77Trong ví dụ này, chúng tôi muốn tải các bài đăng của người dùng, nhưng chỉ khi cột tiêu đề của bài đăng chứa từ "đầu tiên"
Tất nhiên, đóng cửa tải háo hức không bị giới hạn ở "các ràng buộc". Bạn cũng có thể áp dụng các đơn đặt hàng
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
78Háo hức tải lười biếng
Cũng có thể háo hức tải các mô hình liên quan trực tiếp từ bộ sưu tập mô hình đã có sẵn. Điều này có thể hữu ích khi quyết định động có tải các mô hình liên quan hay không hoặc kết hợp với bộ nhớ đệm
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
79Chèn các mô hình liên quan
Đính kèm một mô hình liên quan
Bạn sẽ thường xuyên cần chèn các mô hình liên quan mới. Ví dụ: bạn có thể muốn chèn nhận xét mới cho bài đăng. Thay vì đặt khóa ngoại
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
153 theo cách thủ công trên mô hình, bạn có thể chèn trực tiếp nhận xét mới từ mô hình Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
117 gốc của nóEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
90Trong ví dụ này, trường
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
153 sẽ tự động được đặt trên nhận xét được chènNếu bạn cần lưu nhiều mô hình liên quan
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
91Liên Kết Người Mẫu [Thuộc Về]
Khi cập nhật mối quan hệ
class User extends Eloquent {
protected $table = 'my_users';
97, bạn có thể sử dụng phương pháp Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
157. Phương pháp này sẽ đặt khóa ngoại trên mô hình conEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
92Chèn các mô hình liên quan [Nhiều đến Nhiều]
Bạn cũng có thể chèn các mô hình liên quan khi làm việc với quan hệ nhiều-nhiều. Hãy tiếp tục sử dụng các mô hình
class User extends Eloquent {
protected $table = 'my_users';
16 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
115 của chúng tôi làm ví dụ. Chúng tôi có thể dễ dàng gắn vai trò mới cho người dùng bằng phương thức Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
160Đính kèm nhiều mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
93Bạn cũng có thể chuyển một mảng các thuộc tính sẽ được lưu trữ trên bảng tổng hợp cho mối quan hệ
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
94Tất nhiên, đối lập của
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
160 là Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
162Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
95Cả
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
160 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
162 cũng lấy mảng ID làm đầu vàoEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
96Sử dụng Đồng bộ hóa để Đính kèm Nhiều Mô hình
Bạn cũng có thể sử dụng phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
165 để đính kèm các mô hình liên quan. Phương thức Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
165 chấp nhận một mảng ID để đặt trên bảng tổng hợp. Sau khi thao tác này hoàn tất, chỉ các ID trong mảng sẽ nằm trên bảng trung gian cho mô hìnhEmployee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
97Thêm dữ liệu Pivot khi đồng bộ hóa
Bạn cũng có thể liên kết các giá trị bảng tổng hợp khác với các ID đã cho
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
98Đôi khi bạn có thể muốn tạo một mô hình liên quan mới và đính kèm nó trong một lệnh duy nhất. Đối với thao tác này, bạn có thể sử dụng phương pháp
class User extends Eloquent {
protected $table = 'my_users';
39Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
99Trong ví dụ này, mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
115 mới sẽ được lưu và đính kèm vào mô hình người dùng. Bạn cũng có thể chuyển một mảng các thuộc tính để đặt trên bảng nối cho thao tác này$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
10Chạm vào dấu thời gian của phụ huynh
Khi một mô hình
class User extends Eloquent {
protected $table = 'my_users';
97 một mô hình khác, chẳng hạn như một Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
104 thuộc về một Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
117, việc cập nhật dấu thời gian của cha mẹ khi mô hình con được cập nhật thường rất hữu ích. Ví dụ: khi mô hình Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
104 được cập nhật, bạn có thể muốn tự động chạm vào dấu thời gian class User extends Eloquent {
protected $table = 'my_users';
23 của Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
117 sở hữu. Hùng biện làm cho nó dễ dàng. Chỉ cần thêm thuộc tính Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
175 chứa tên của các mối quan hệ vào mô hình con$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
11Bây giờ, khi bạn cập nhật một
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
104, thì Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
117 sở hữu sẽ có cột class User extends Eloquent {
protected $table = 'my_users';
23 được cập nhật$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
12Làm việc với Pivot Table
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ử đối tượng
class User extends Eloquent {
protected $table = 'my_users';
16 của chúng ta có nhiều đối tượng Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
115 có liên quan đến. Sau khi truy cập vào mối quan hệ này, chúng tôi có thể truy cập bảng Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
181 trên các mô hình$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
13Lưu ý rằng mỗi mô hình
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
115 mà chúng tôi truy xuất được tự động gán một thuộc tính Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
181. Thuộc tính này chứa một mô hình đại diện cho bảng trung gian và có thể được sử dụng như bất kỳ mô hình Eloquent nào khácTheo mặc định, chỉ các khóa sẽ xuất hiện trên đối tượng
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
181. Nếu bảng tổng hợp 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ệ$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
14Bây giờ các thuộc tính
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
185 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
186 sẽ có thể truy cập được trên đối tượng Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
181 của chúng tôi cho mô hình Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
115Nếu bạn muốn bảng tổng hợp của mình tự động duy trì dấu thời gian
class User extends Eloquent {
protected $table = 'my_users';
24 và class User extends Eloquent {
protected $table = 'my_users';
23, hãy sử dụng phương pháp Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
191 trong định nghĩa mối quan hệ$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
15Xóa bản ghi trên bảng Pivot
Để xóa tất cả các bản ghi trên bảng tổng hợp cho một mô hình, bạn có thể sử dụng phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
162$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
16Lưu ý rằng thao tác này không xóa các bản ghi khỏi bảng
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
107 mà chỉ xóa khỏi bảng tổng hợpCập nhật bản ghi trên bảng Pivot
Đôi khi, bạn có thể cần cập nhật bảng tổng hợp của mình nhưng không được tách nó ra. Nếu bạn muốn cập nhật bảng tổng hợp của mình tại chỗ, bạn có thể sử dụng phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
194 như vậy$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
17Xác định mô hình Pivot tùy chỉnh
Laravel cũng cho phép bạn xác định mô hình Pivot tùy chỉnh. Để xác định một mô hình tùy chỉnh, trước tiên hãy tạo lớp mô hình "Cơ sở" của riêng bạn mở rộng
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
195. Trong các mô hình Eloquent khác của bạn, hãy mở rộng mô hình cơ sở tùy chỉnh này thay vì cơ sở Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
195 mặc định. Trong mô hình cơ sở của bạn, hãy thêm hàm sau để trả về một phiên bản của mô hình Pivot tùy chỉnh của bạn$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
18bộ sưu tập
Tất cả các tập hợp nhiều kết quả được trả về bởi Eloquent, thông qua phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
144 hoặc Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
198, sẽ trả về một đối tượng tập hợp. Đối tượng này triển khai giao diện PHP Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
199 để nó có thể được lặp lại giống như một mảng. Tuy nhiên, đối tượng này cũng có nhiều phương thức hữu ích khác để làm việc với tập kết quảKiểm tra xem một bộ sưu tập có chứa khóa không
Ví dụ: chúng tôi có thể xác định xem tập kết quả có chứa khóa chính đã cho hay không bằng cách sử dụng phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
300Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
45Các bộ sưu tập cũng có thể được chuyển đổi thành một mảng hoặc JSON
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
50Nếu một bộ sưu tập được chuyển thành một chuỗi, nó sẽ được trả về dưới dạng JSON
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
51Bộ sưu tập lặp lại
Các bộ sưu tập Eloquent cũng chứa một số phương thức hữu ích để lặp và lọc các mục mà chúng chứa
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
52Bộ sưu tập lọc
Khi lọc các bộ sưu tập, hàm gọi lại được cung cấp sẽ được sử dụng làm hàm gọi lại cho array_filter
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
53Ghi chú. Khi lọc một bộ sưu tập và chuyển đổi nó thành JSON, trước tiên hãy thử gọi hàm
301 để đặt lại các khóa của mảngEmployee::where['salary', '>', '10000'] ->update[[ 'address' => 'Juan Dela Cruz', 'address' => 'My address' ]];
Áp dụng gọi lại cho từng đối tượng bộ sưu tập
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
54Sắp xếp một bộ sưu tập theo một giá trị
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
55Sắp xếp một bộ sưu tập theo một giá trị
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
56Trả lại một loại bộ sưu tập tùy chỉnh
Đôi khi, bạn có thể muốn trả về một đối tượng Bộ sưu tập tùy chỉnh bằng các phương thức được thêm vào của riêng bạn. Bạn có thể chỉ định điều này trên mô hình Eloquent của mình bằng cách ghi đè phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
302$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
57Bộ truy cập & bộ biến đổi
Định nghĩa một Accessor
Eloquent cung cấp một cách thuận tiện để chuyển đổi các thuộc tính mô hình của bạn khi lấy hoặc thiết lập chúng. Chỉ cần xác định một phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
303 trên mô hình của bạn để khai báo một bộ truy cập. Hãy nhớ rằng các phương thức phải tuân theo trường hợp lạc đà, mặc dù các cột cơ sở dữ liệu của bạn là trường hợp con rắn$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
58Trong ví dụ trên, cột
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
304 có một trình truy cập. Lưu ý rằng giá trị của thuộc tính được chuyển đến bộ truy cậpXác định một Mutator
Người đột biến được khai báo theo cách tương tự
$employee = Employee::find[1];
$employee->update[[
'name' => 'Juan Dela Cruz',
'address' => 'My address'
], ['touch' => false]];
59Người đột biến ngày
Theo mặc định, Eloquent sẽ chuyển đổi các cột
class User extends Eloquent {
protected $table = 'my_users';
24 và class User extends Eloquent {
protected $table = 'my_users';
23 thành các phiên bản của Carbon, cung cấp một loạt các phương thức hữu ích và mở rộng lớp Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
307 gốc của PHPBạn có thể tùy chỉnh trường nào được thay đổi tự động và thậm chí vô hiệu hóa hoàn toàn thay đổi này bằng cách ghi đè phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
308 của mô hìnhclass User extends Eloquent {
protected $table = 'my_users';
00Khi một cột được coi là một ngày, bạn có thể đặt giá trị của nó thành dấu thời gian UNIX, chuỗi ngày [
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
309], chuỗi ngày-giờ và tất nhiên là một thể hiện của Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
307 / Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
311Để vô hiệu hóa hoàn toàn các thay đổi ngày tháng, chỉ cần trả về một mảng trống từ phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
308Sự kiện người mẫu
Các mô hình hùng hồn kích hoạt một số sự kiện, cho phép bạn kết nối vào các điểm khác nhau trong vòng đời của mô hình bằng các phương pháp sau.
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
313, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
314, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
315, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
316, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
317, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
318, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
319, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
320, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
321, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
322Bất cứ khi nào một mục mới được lưu lần đầu tiên, các sự kiện
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
313 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
314 sẽ kích hoạt. Nếu một mục không phải là mới và phương pháp class User extends Eloquent {
protected $table = 'my_users';
39 được gọi, thì sự kiện Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
315 / Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
316 sẽ kích hoạt. Trong cả hai trường hợp, sự kiện Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
317 / Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
318 sẽ kích hoạtHủy lưu hoạt động thông qua sự kiện
Nếu
class User extends Eloquent {
protected $table = 'my_users';
26 được trả về từ các sự kiện Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
313, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
315, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
317 hoặc Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
319, hành động sẽ bị hủyclass User extends Eloquent {
protected $table = 'my_users';
01Đặt phương pháp khởi động mô hình
Các mô hình Eloquent cũng chứa một phương thức tĩnh
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
335, có thể cung cấp một nơi thuận tiện để đăng ký các ràng buộc sự kiện của bạnclass User extends Eloquent {
protected $table = 'my_users';
02Người quan sát mô hình
Để củng cố việc xử lý các sự kiện mô hình, bạn có thể đăng ký một người quan sát mô hình. Một lớp người quan sát có thể có các phương thức tương ứng với các sự kiện mô hình khác nhau. Ví dụ: các phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
313, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
315, Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
317 có thể nằm trên một người quan sát, ngoài bất kỳ tên sự kiện mô hình nào khácVì vậy, ví dụ, một người quan sát mô hình có thể trông như thế này
class User extends Eloquent {
protected $table = 'my_users';
03Bạn có thể đăng ký một phiên bản người quan sát bằng phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
339class User extends Eloquent {
protected $table = 'my_users';
04Chuyển đổi sang mảng/JSON
Chuyển đổi một mô hình thành một mảng
Khi xây dựng API JSON, bạn có thể thường cần chuyển đổi các mô hình và mối quan hệ của mình thành mảng hoặc JSON. Vì vậy, Eloquent bao gồm các phương pháp để làm như vậy. Để chuyển đổi một mô hình và mối quan hệ được tải của nó thành một mảng, bạn có thể sử dụng phương thức
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
340class User extends Eloquent {
protected $table = 'my_users';
05Lưu ý rằng toàn bộ bộ sưu tập mô hình cũng có thể được chuyển đổi thành mảng
class User extends Eloquent {
protected $table = 'my_users';
06Chuyển đổi một mô hình thành JSON
Để chuyển đổi một mô hình thành JSON, bạn có thể sử dụng phương pháp
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
341class User extends Eloquent {
protected $table = 'my_users';
07Trả lại một mô hình từ một tuyến đường
Lưu ý rằng khi một mô hình hoặc bộ sưu tập được truyền thành một chuỗi, nó sẽ được chuyển đổi thành JSON, nghĩa là bạn có thể trả về các đối tượng Eloquent trực tiếp từ các route của ứng dụng của mình
class User extends Eloquent {
protected $table = 'my_users';
08Ẩn các thuộc tính khỏi mảng hoặc chuyển đổi JSON
Đôi khi, bạn có thể muốn giới hạn các thuộc tính được bao gồm trong mảng hoặc biểu mẫu JSON của mô hình, chẳng hạn như mật khẩu. Để làm như vậy, hãy thêm định nghĩa thuộc tính
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
342 vào mô hình của bạnclass User extends Eloquent {
protected $table = 'my_users';
09Ghi chú. Khi ẩn các mối quan hệ, hãy sử dụng tên phương thức của mối quan hệ, không phải tên của trình truy cập động
Ngoài ra, bạn có thể sử dụng thuộc tính
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
343 để xác định danh sách trắngclass User extends Eloquent {
protected $table = 'my_users';
10Đôi khi, bạn có thể cần thêm các thuộc tính mảng không có cột tương ứng trong cơ sở dữ liệu của mình. Để làm như vậy, chỉ cần xác định một bộ truy cập cho giá trị
class User extends Eloquent {
protected $table = 'my_users';
11Khi bạn đã tạo bộ truy cập, chỉ cần thêm giá trị vào thuộc tính
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
344 trên mô hìnhclass User extends Eloquent {
protected $table = 'my_users';
12Khi thuộc tính đã được thêm vào danh sách
Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
344, nó sẽ được đưa vào cả dạng mảng và dạng JSON của mô hình. Các thuộc tính trong mảng Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
344 tôn trọng cấu hình Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
343 và Employee::where['salary', '>', '10000']
->update[[
'address' => 'Juan Dela Cruz',
'address' => 'My address'
]];
342 trên mô hình