Khi xây dựng API bằng Laravel, bạn 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. Eloquent bao gồm các phương thức thuận tiện để thực hiện các chuyển đổi này, cũng như kiểm soát các thuộc tính nào được đưa vào biểu diễn tuần tự hóa các mô hình của bạn
Lưu ý
Để có cách xử lý tuần tự hóa JSON của bộ sưu tập và mô hình Eloquent hiệu quả hơn nữa, hãy xem tài liệu về tài nguyên API của Eloquent.
Sê-ri hóa Mô hình & Bộ sưu tập
Tuần tự hóa thành mảng
Để chuyển đổi một mô hình và các mối quan hệ được tải của nó thành một mảng, bạn nên sử dụng phương thức
return $user->attributesToArray[];
4. Phương thức này là đệ quy nên tất cả các thuộc tính và tất cả các quan hệ [bao gồm cả quan hệ của các quan hệ] sẽ được chuyển thành mảng$user = User::with['roles']->first[];
Phương thức
return $user->attributesToArray[];
5 có thể được sử dụng để chuyển đổi các thuộc tính của mô hình thành một mảng chứ không phải các mối quan hệ của nóreturn $user->attributesToArray[];
Bạn cũng có thể chuyển đổi toàn bộ bộ sưu tập mô hình thành mảng bằng cách gọi phương thức
return $user->attributesToArray[];
4 trên cá thể bộ sưu tậpTuần tự hóa thành JSON
Để chuyển đổi một mô hình thành JSON, bạn nên sử dụng phương thức
return $user->attributesToArray[];
7. Giống như return $user->attributesToArray[];
4, phương thức của return $user->attributesToArray[];
7 là đệ quy nên tất cả các thuộc tính và quan hệ sẽ được chuyển thành JSON. Bạn cũng có thể chỉ định bất kỳ tùy chọn mã hóa JSON nào được hỗ trợ bởi PHPNgoài ra, bạn có thể chuyển một mô hình hoặc bộ sưu tập thành một chuỗi, chuỗi này sẽ tự động gọi phương thức
return $user->attributesToArray[];
7 trên mô hình hoặc bộ sưu tập$user = User::with['roles']->first[];
0Vì các mô hình và bộ sưu tập được chuyển đổi thành JSON khi truyền thành chuỗi, nên bạn có thể trả về các đối tượng Eloquent trực tiếp từ các route hoặc bộ điều khiển của ứng dụng của mình. Laravel sẽ tự động tuần tự hóa các mô hình và bộ sưu tập Eloquent của bạn thành JSON khi chúng được trả về từ các tuyến đường hoặc bộ điều khiển
$user = User::with['roles']->first[];
1Các mối quan hệ
Khi một Eloquent model được chuyển đổi thành JSON, các mối quan hệ được tải của nó sẽ tự động được đưa vào làm thuộc tính trên đối tượng JSON. Ngoài ra, mặc dù các phương thức của mối quan hệ Eloquent được xác định bằng tên phương thức "trường hợp lạc đà", thuộc tính JSON của mối quan hệ sẽ là "trường hợp rắn"
Ẩn các thuộc tính khỏi JSON
Đôi khi, bạn có thể muốn giới hạn các thuộc tính, chẳng hạn như mật khẩu, được bao gồm trong biểu diễn mảng hoặc JSON của mô hình của bạn. Để làm như vậy, hãy thêm thuộc tính
return $user->toJson[JSON_PRETTY_PRINT];
1 vào mô hình của bạn. Các thuộc tính được liệt kê trong mảng của thuộc tính return $user->toJson[JSON_PRETTY_PRINT];
1 sẽ không được đưa vào biểu diễn tuần tự của mô hình của bạn$user = User::with['roles']->first[];
4Lưu ý
Để ẩn mối quan hệ, hãy thêm tên phương thức của mối quan hệ vào thuộc tính1 của mô hình Eloquent của bạn.
return $user->toJson[JSON_PRETTY_PRINT];
Ngoài ra, bạn có thể sử dụng thuộc tính
return $user->toJson[JSON_PRETTY_PRINT];
4 để xác định "danh sách cho phép" các thuộc tính sẽ được đưa vào biểu diễn JSON và mảng của mô hình của bạn. Tất cả các thuộc tính không có trong mảng return $user->toJson[JSON_PRETTY_PRINT];
5 sẽ bị ẩn khi mô hình được chuyển đổi thành mảng hoặc JSON$user = User::with['roles']->first[];
8Tạm thời sửa đổi thuộc tính khả năng hiển thị
Nếu bạn muốn hiển thị một số thuộc tính thường ẩn trên một phiên bản mô hình nhất định, bạn có thể sử dụng phương thức
return $user->toJson[JSON_PRETTY_PRINT];
6. Phương thức return $user->toJson[JSON_PRETTY_PRINT];
6 trả về thể hiện của mô hìnhreturn $user->attributesToArray[];
1Tương tự như vậy, nếu bạn muốn ẩn một số thuộc tính thường hiển thị, bạn có thể sử dụng phương pháp
return $user->toJson[JSON_PRETTY_PRINT];
8return $user->attributesToArray[];
3Nối các giá trị vào JSON
Đôi khi, khi chuyển đổi mô hình thành mảng hoặc JSON, bạn có thể muốn thêm các thuộc tính không có cột tương ứng trong cơ sở dữ liệu của mình. Để làm như vậy, trước tiên hãy xác định một bộ truy cập cho giá trị
return $user->attributesToArray[];
4Sau khi tạo trình truy cập, hãy thêm tên thuộc tính vào thuộc tính
return $user->toJson[JSON_PRETTY_PRINT];
9 của mô hình của bạn. Lưu ý rằng các tên thuộc tính thường được tham chiếu bằng cách sử dụng biểu diễn tuần tự "trường hợp rắn" của chúng, mặc dù phương thức PHP của trình truy cập được xác định bằng cách sử dụng "trường hợp lạc đà"return $user->attributesToArray[];
0Khi thuộc tính đã được thêm vào danh sách
return $user->toJson[JSON_PRETTY_PRINT];
9, nó sẽ được đưa vào cả biểu diễn mảng và JSON của mô hình. Các thuộc tính trong mảng return $user->toJson[JSON_PRETTY_PRINT];
9 cũng sẽ tôn trọng cài đặt return $user->toJson[JSON_PRETTY_PRINT];
4 và $user = User::with['roles']->first[];
03 được định cấu hình trên mô hìnhXuất hiện tại thời gian chạy
Khi chạy, bạn có thể hướng dẫn một phiên bản mô hình nối thêm các thuộc tính bổ sung bằng cách sử dụng phương thức
$user = User::with['roles']->first[];
04. Hoặc, bạn có thể sử dụng phương thức $user = User::with['roles']->first[];
05 để ghi đè toàn bộ mảng các thuộc tính được nối thêm cho một phiên bản mô hình nhất địnhreturn $user->attributesToArray[];
1Số sê-ri hóa ngày
Tùy chỉnh định dạng ngày mặc định
Bạn có thể tùy chỉnh định dạng tuần tự hóa mặc định bằng cách ghi đè phương thức
$user = User::with['roles']->first[];
06. Phương pháp này không ảnh hưởng đến cách định dạng ngày của bạn để lưu trữ trong cơ sở dữ liệureturn $user->attributesToArray[];
2Tùy chỉnh định dạng ngày cho mỗi thuộc tính
Bạn có thể tùy chỉnh định dạng tuần tự hóa của các thuộc tính ngày Eloquent riêng lẻ bằng cách chỉ định định dạng ngày trong khai báo truyền của mô hình