Truyền PHP

Trình truy cập, trình biến đổi và truyền thuộc tính cho phép bạn chuyển đổi các giá trị thuộc tính Eloquent khi bạn truy xuất hoặc đặt chúng trên các phiên bản mô hình. Ví dụ: bạn có thể muốn sử dụng trình mã hóa Laravel để mã hóa một giá trị trong khi nó được lưu trữ trong cơ sở dữ liệu, sau đó tự động giải mã thuộc tính khi bạn truy cập nó trên mô hình Eloquent. Hoặc, bạn có thể muốn chuyển đổi một chuỗi JSON được lưu trữ trong cơ sở dữ liệu của mình thành một mảng khi nó được truy cập thông qua mô hình Eloquent của bạn

Bộ truy cập & bộ biến đổi

Định nghĩa một Accessor

Một bộ truy cập biến đổi một giá trị thuộc tính Eloquent khi nó được truy cập. Để xác định một trình truy cập, hãy tạo một phương thức được bảo vệ trên mô hình của bạn để thể hiện thuộc tính có thể truy cập. Tên phương thức này phải tương ứng với biểu diễn "trường hợp lạc đà" của cột cơ sở dữ liệu/thuộc tính mô hình thực sự bên dưới khi áp dụng

Trong ví dụ này, chúng ta sẽ định nghĩa một bộ truy cập cho thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

6. Trình truy cập sẽ tự động được gọi bởi Eloquent khi cố gắng truy xuất giá trị của thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

6. Tất cả các phương thức của bộ truy cập / bộ biến đổi thuộc tính phải khai báo gợi ý kiểu trả về của

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

8

use Illuminate\Database\Eloquent\Casts\Attribute;

use Illuminate\Database\Eloquent\Model;

* Get the user's first name.

* @return \Illuminate\Database\Eloquent\Casts\Attribute

protected function firstName[]: Attribute

get: fn [$value] => ucfirst[$value],

Tất cả các phương thức truy cập trả về một thể hiện

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

9 xác định cách thuộc tính sẽ được truy cập và, tùy chọn, biến đổi. Trong ví dụ này, chúng tôi chỉ xác định cách thuộc tính sẽ được truy cập. Để làm như vậy, chúng tôi cung cấp đối số

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

0 cho hàm tạo của lớp

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

9

Như bạn có thể thấy, giá trị ban đầu của cột được chuyển đến bộ truy cập, cho phép bạn thao tác và trả về giá trị. Để truy cập giá trị của bộ truy cập, bạn có thể chỉ cần truy cập thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

6 trên một phiên bản mô hình

________số 8

Lưu ý
Nếu bạn muốn các giá trị được tính toán này được thêm vào các biểu diễn mảng/JSON của mô hình, bạn sẽ cần nối thêm chúng.

Xây dựng đối tượng giá trị từ nhiều thuộc tính

Đôi khi, trình truy cập của bạn có thể cần chuyển đổi nhiều thuộc tính mô hình thành một "đối tượng giá trị" duy nhất. Để làm như vậy, bao đóng

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

0 của bạn có thể chấp nhận đối số thứ hai của

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

4, đối số này sẽ được cung cấp tự động cho bao đóng và sẽ chứa một mảng gồm tất cả các thuộc tính hiện tại của mô hình

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

1

Bộ nhớ đệm truy cập

Khi trả về các đối tượng giá trị từ bộ truy cập, mọi thay đổi được thực hiện đối với đối tượng giá trị sẽ tự động được đồng bộ hóa trở lại mô hình trước khi mô hình được lưu. Điều này là có thể bởi vì Eloquent giữ lại các phiên bản được trả về bởi các bộ truy cập để nó có thể trả về cùng một phiên bản mỗi khi bộ truy cập được gọi

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

Tuy nhiên, đôi khi bạn có thể muốn bật bộ nhớ đệm cho các giá trị nguyên thủy như chuỗi và booleans, đặc biệt nếu chúng cần nhiều tính toán. Để thực hiện điều này, bạn có thể gọi phương thức

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

5 khi xác định trình truy cập của mình

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

Nếu bạn muốn vô hiệu hóa hành vi lưu trữ đối tượng của các thuộc tính, bạn có thể gọi phương thức

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

6 khi xác định thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

6

Xác định một Mutator

Trình biến đổi biến đổi giá trị thuộc tính Eloquent khi nó được đặt. Để xác định bộ biến đổi, bạn có thể cung cấp đối số

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

7 khi xác định thuộc tính của mình. Hãy xác định một trình biến đổi cho thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

6. Trình biến đổi này sẽ tự động được gọi khi chúng ta cố gắng đặt giá trị của thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

6 trên mô hình

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

0

Bao đóng bộ biến đổi sẽ nhận giá trị đang được đặt trên thuộc tính, cho phép bạn thao tác giá trị và trả về giá trị đã thao tác. Để sử dụng trình biến đổi của chúng tôi, chúng tôi chỉ cần đặt thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

6 trên mô hình Eloquent

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

2

Trong ví dụ này, cuộc gọi lại

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

7 sẽ được gọi với giá trị

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

62. Trình biến đổi sau đó sẽ áp dụng hàm

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

63 cho tên và đặt giá trị kết quả của nó trong mảng

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

4 bên trong của mô hình

Đột biến nhiều thuộc tính

Đôi khi trình biến đổi của bạn có thể cần đặt nhiều thuộc tính trên mô hình cơ bản. Để làm như vậy, bạn có thể trả về một mảng từ bao đóng

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

7. Mỗi khóa trong mảng phải tương ứng với một thuộc tính/cột cơ sở dữ liệu cơ bản được liên kết với mô hình

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

8

Đúc thuộc tính

Truyền thuộc tính cung cấp chức năng tương tự như bộ truy cập và bộ biến đổi mà không yêu cầu bạn xác định bất kỳ phương thức bổ sung nào trên mô hình của mình. Thay vào đó, thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

66 của mô hình của bạn cung cấp một phương pháp thuận tiện để chuyển đổi các thuộc tính thành các loại dữ liệu phổ biến

Thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

66 phải là một mảng trong đó khóa là tên của thuộc tính được truyền và giá trị là loại bạn muốn truyền cột tới. Các loại diễn viên được hỗ trợ là

  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    68
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    69
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    00
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    01
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    02
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    03
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    04
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    05
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    06
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    07
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    08
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    09
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    20
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    21
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    22
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    23
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    24
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    25
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    26
  • $user->address->lineOne = 'Updated Address Line 1 Value';

    $user->address->lineTwo = 'Updated Address Line 2 Value';

    27

Để chứng minh việc truyền thuộc tính, hãy truyền thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

28, được lưu trữ trong cơ sở dữ liệu của chúng tôi dưới dạng số nguyên [

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

29 hoặc

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

80] thành giá trị boolean

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

4

Sau khi xác định phép truyền, thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

28 sẽ luôn được truyền thành kiểu boolean khi bạn truy cập nó, ngay cả khi giá trị cơ bản được lưu trữ trong cơ sở dữ liệu dưới dạng số nguyên

$firstName = $user->first_name;

0

Nếu bạn cần thêm một diễn viên mới, tạm thời trong thời gian chạy, bạn có thể sử dụng phương pháp

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

82. Các định nghĩa diễn viên này sẽ được thêm vào bất kỳ diễn viên nào đã được xác định trên mô hình

Cảnh báo
Các thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

83 sẽ không được truyền. Ngoài ra, bạn không bao giờ nên xác định một diễn viên [hoặc một thuộc tính] có cùng tên với một mối quan hệ.

Đúc có thể xâu chuỗi

Bạn có thể sử dụng lớp cast

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

84 để truyền thuộc tính mô hình cho đối tượng

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

85 thông thạo

$firstName = $user->first_name;

1

Truyền mảng & JSON

Diễn viên

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

68 đặc biệt hữu ích khi làm việc với các cột được lưu trữ dưới dạng JSON tuần tự hóa. Ví dụ: nếu cơ sở dữ liệu của bạn có loại trường

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

87 hoặc

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

88 chứa JSON được tuần tự hóa, thì việc thêm biến

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

68 vào thuộc tính đó sẽ tự động giải tuần tự hóa thuộc tính thành một mảng PHP khi bạn truy cập nó trên mô hình Eloquent của mình

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

4

Sau khi xác định kiểu truyền, bạn có thể truy cập thuộc tính

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

40 và nó sẽ tự động được giải tuần tự hóa từ JSON thành một mảng PHP. Khi bạn đặt giá trị của thuộc tính

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

40, mảng đã cho sẽ tự động được tuần tự hóa lại thành JSON để lưu trữ

Để cập nhật một trường duy nhất của thuộc tính JSON với cú pháp ngắn gọn hơn, bạn có thể sử dụng toán tử

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

42 khi gọi phương thức

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

43

$firstName = $user->first_name;

3

Truyền đối tượng mảng và bộ sưu tập

Mặc dù dàn diễn viên

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

68 tiêu chuẩn là đủ cho nhiều ứng dụng, nhưng nó có một số nhược điểm. Kể từ khi ép kiểu

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

68 trả về kiểu nguyên thủy, không thể thay đổi trực tiếp phần bù của mảng. Ví dụ: đoạn mã sau sẽ gây ra lỗi PHP

$firstName = $user->first_name;

4

Để giải quyết vấn đề này, Laravel cung cấp một dàn diễn viên

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

46 để chuyển thuộc tính JSON của bạn sang một lớp ArrayObject. Tính năng này được triển khai bằng cách sử dụng triển khai truyền tùy chỉnh của Laravel, cho phép Laravel lưu vào bộ nhớ đệm một cách thông minh và chuyển đổi đối tượng đã thay đổi sao cho có thể sửa đổi các offset riêng lẻ mà không gây ra lỗi PHP. Để sử dụng diễn viên

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

46, chỉ cần gán nó cho một thuộc tính

$firstName = $user->first_name;

5

Tương tự, Laravel cung cấp một phiên bản

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

48 để chuyển thuộc tính JSON của bạn sang một phiên bản Bộ sưu tập của Laravel

$firstName = $user->first_name;

6

Đúc ngày

Theo mặc định, Eloquent sẽ chuyển các cột

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

49 và

$firstName = $user->first_name;

00 sang các phiên bản của Carbon, mở rộng lớp PHP

$firstName = $user->first_name;

01 và cung cấp một loạt các phương thức hữu ích. Bạn có thể truyền các thuộc tính ngày bổ sung bằng cách xác định các phép truyền ngày bổ sung trong mảng thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

66 của mô hình của bạn. Thông thường, ngày nên được ép kiểu bằng cách sử dụng kiểu ép kiểu

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

03 hoặc

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

05

Khi xác định một diễn viên

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

02 hoặc

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

03, bạn cũng có thể chỉ định định dạng của ngày. Định dạng này sẽ được sử dụng khi mô hình được tuần tự hóa thành một mảng hoặc JSON

$firstName = $user->first_name;

7

Khi một cột được truyền dưới dạng ngày, bạn có thể đặt giá trị thuộc tính mô hình tương ứng thành dấu thời gian UNIX, chuỗi ngày [

$firstName = $user->first_name;

07], chuỗi ngày-thời gian hoặc một thể hiện

$firstName = $user->first_name;

01 /

$firstName = $user->first_name;

09. Giá trị của ngày sẽ được chuyển đổi và lưu trữ chính xác trong cơ sở dữ liệu của bạn

Bạn có thể tùy chỉnh định dạng tuần tự hóa mặc định cho tất cả các ngày của mô hình của mình bằng cách xác định phương thức

$firstName = $user->first_name;

10 trên mô hình của bạn. 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ệu

$firstName = $user->first_name;

8

Để chỉ định định dạng sẽ được sử dụng khi thực sự lưu trữ ngày của mô hình trong cơ sở dữ liệu của bạn, bạn nên xác định thuộc tính

$firstName = $user->first_name;

11 trên mô hình của mình

$firstName = $user->first_name;

9

Truyền ngày, tuần tự hóa và múi giờ

Theo mặc định, các phiên bản

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

02 và

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

03 sẽ tuần tự hóa các ngày thành chuỗi ngày UTC ISO-8601 [

$firstName = $user->first_name;

14], bất kể múi giờ được chỉ định trong tùy chọn cấu hình

$firstName = $user->first_name;

15 của ứng dụng của bạn. Bạn được khuyến khích luôn sử dụng định dạng tuần tự hóa này, cũng như lưu trữ ngày tháng của ứng dụng theo múi giờ UTC bằng cách không thay đổi tùy chọn cấu hình

$firstName = $user->first_name;

15 của ứng dụng từ giá trị

$firstName = $user->first_name;

17 mặc định của nó. Việc sử dụng múi giờ UTC một cách nhất quán trong toàn bộ ứng dụng của bạn sẽ mang lại mức độ tương tác tối đa với các thư viện thao tác ngày khác được viết bằng PHP và JavaScript

Nếu một định dạng tùy chỉnh được áp dụng cho diễn viên

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

02 hoặc

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

03, chẳng hạn như

$firstName = $user->first_name;

20, thì múi giờ bên trong của phiên bản Carbon sẽ được sử dụng trong quá trình tuần tự hóa ngày tháng. Thông thường, đây sẽ là múi giờ được chỉ định trong tùy chọn cấu hình

$firstName = $user->first_name;

15 của ứng dụng của bạn

Đúc Enum

Cảnh báo
Truyền Enum chỉ khả dụng cho PHP 8. 1+.

Eloquent cũng cho phép bạn truyền các giá trị thuộc tính của mình sang PHP Enums. Để thực hiện điều này, bạn có thể chỉ định thuộc tính và enum mà bạn muốn truyền trong mảng thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

66 của mô hình

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

10

Sau khi bạn đã xác định kiểu truyền trên mô hình của mình, thuộc tính được chỉ định sẽ tự động được truyền tới và từ một enum khi bạn tương tác với thuộc tính

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

11

Truyền được mã hóa

Diễn viên

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

08 sẽ mã hóa giá trị thuộc tính của mô hình bằng các tính năng mã hóa tích hợp của Laravel. Ngoài ra, các phiên bản

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

09,

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

20,

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

21,

$firstName = $user->first_name;

27 và

$firstName = $user->first_name;

28 hoạt động giống như các phiên bản không được mã hóa của chúng;

Vì độ dài cuối cùng của văn bản được mã hóa không thể dự đoán được và dài hơn so với văn bản thuần túy của nó, hãy đảm bảo rằng cột cơ sở dữ liệu được liên kết thuộc loại

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

88 hoặc lớn hơn. Ngoài ra, vì các giá trị được mã hóa trong cơ sở dữ liệu nên bạn sẽ không thể truy vấn hoặc tìm kiếm các giá trị thuộc tính được mã hóa

Xoay phím

Như bạn đã biết, Laravel mã hóa các chuỗi bằng cách sử dụng giá trị cấu hình

$firstName = $user->first_name;

30 được chỉ định trong tệp cấu hình

$firstName = $user->first_name;

31 của ứng dụng của bạn. Thông thường, giá trị này tương ứng với giá trị của biến môi trường

$firstName = $user->first_name;

32. Nếu cần xoay khóa mã hóa của ứng dụng, bạn sẽ cần mã hóa lại thủ công các thuộc tính đã mã hóa của mình bằng khóa mới

Truyền thời gian truy vấn

Đôi khi, bạn có thể cần áp dụng ép kiểu trong khi thực hiện truy vấn, chẳng hạn như khi chọn giá trị thô từ bảng. Ví dụ: xem xét truy vấn sau

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

12

Thuộc tính

$firstName = $user->first_name;

33 trên kết quả của truy vấn này sẽ là một chuỗi đơn giản. Sẽ thật tuyệt vời nếu chúng ta có thể áp dụng cách truyền

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

03 cho thuộc tính này khi thực hiện truy vấn. Rất may, chúng tôi có thể thực hiện điều này bằng cách sử dụng phương pháp

$firstName = $user->first_name;

35

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

13

Diễn viên tùy chỉnh

Laravel có nhiều loại cast hữu ích, tích hợp sẵn; . Để tạo một diễn viên, hãy thực hiện lệnh

$firstName = $user->first_name;

36 Artisan. Lớp diễn viên mới sẽ được đặt trong thư mục

$firstName = $user->first_name;

37 của bạn

Tất cả các lớp diễn viên tùy chỉnh triển khai giao diện

$firstName = $user->first_name;

38. Các lớp triển khai giao diện này phải xác định phương thức

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

0 và

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

7. Phương thức

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

0 chịu trách nhiệm chuyển đổi giá trị thô từ cơ sở dữ liệu thành giá trị truyền, trong khi phương thức

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

7 sẽ chuyển đổi giá trị truyền thành giá trị thô có thể được lưu trữ trong cơ sở dữ liệu. Ví dụ: chúng tôi sẽ triển khai lại loại truyền

$firstName = $user->first_name;

43 tích hợp dưới dạng loại truyền tùy chỉnh

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

14

Sau khi bạn đã xác định loại truyền tùy chỉnh, bạn có thể đính kèm nó vào thuộc tính mô hình bằng tên lớp của nó

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

4

Đúc đối tượng giá trị

Bạn không bị giới hạn trong việc truyền giá trị cho các kiểu nguyên thủy. Bạn cũng có thể truyền giá trị cho các đối tượng. Xác định các kiểu truyền tùy chỉnh để truyền các giá trị cho các đối tượng rất giống với việc truyền các kiểu nguyên thủy;

Ví dụ: chúng tôi sẽ định nghĩa một lớp truyền tùy chỉnh để truyền nhiều giá trị mô hình vào một đối tượng giá trị

$firstName = $user->first_name;

45 duy nhất. Chúng tôi sẽ giả sử giá trị

$firstName = $user->first_name;

45 có hai thuộc tính công khai.

$firstName = $user->first_name;

47 và

$firstName = $user->first_name;

48

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

16

Khi truyền tới các đối tượng giá trị, mọi thay đổi được thực hiện đối với đối tượng giá trị sẽ tự động được đồng bộ hóa trở lại mô hình trước khi mô hình được lưu

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

17

Lưu ý
Nếu bạn định tuần tự hóa các mô hình Eloquent chứa các đối tượng giá trị thành JSON hoặc mảng, bạn nên triển khai các giao diện

$firstName = $user->first_name;

49 và

$firstName = $user->first_name;

50 trên đối tượng giá trị.

Tuần tự hóa mảng/JSON

Khi một mô hình Eloquent được chuyển đổi thành một mảng hoặc JSON bằng các phương thức

$firstName = $user->first_name;

51 và

$firstName = $user->first_name;

52, các đối tượng giá trị truyền tùy chỉnh của bạn thường sẽ được sắp xếp theo thứ tự miễn là chúng triển khai các giao diện

$firstName = $user->first_name;

49 và

$firstName = $user->first_name;

50. Tuy nhiên, khi sử dụng các đối tượng giá trị do thư viện bên thứ ba cung cấp, bạn có thể không có khả năng thêm các giao diện này vào đối tượng

Do đó, bạn có thể chỉ định rằng lớp truyền tùy chỉnh của bạn sẽ chịu trách nhiệm tuần tự hóa đối tượng giá trị. Để làm như vậy, lớp truyền tùy chỉnh của bạn phải triển khai giao diện

$firstName = $user->first_name;

55. Giao diện này nói rằng lớp của bạn phải chứa một phương thức

$firstName = $user->first_name;

56 sẽ trả về dạng tuần tự hóa của đối tượng giá trị của bạn

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

18

Đúc trong nước

Đôi khi, bạn có thể cần viết một lớp ép kiểu tùy chỉnh chỉ chuyển đổi các giá trị đang được đặt trên mô hình và không thực hiện bất kỳ thao tác nào khi các thuộc tính đang được truy xuất từ ​​mô hình

Các diễn viên tùy chỉnh chỉ trong nước nên triển khai giao diện

$firstName = $user->first_name;

57, giao diện này chỉ yêu cầu một phương thức

protected function hash[]: Attribute

get: fn [$value] => bcrypt[gzuncompress[$value]],

7 được xác định. Lệnh

$firstName = $user->first_name;

36 Artisan có thể được gọi với tùy chọn

$firstName = $user->first_name;

60 để tạo lớp truyền chỉ gửi đến

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

19

Một ví dụ cổ điển về một diễn viên chỉ trong nước là một diễn viên "băm". Ví dụ: chúng tôi có thể xác định một diễn viên băm các giá trị gửi đến thông qua một thuật toán nhất định

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

0

Thông số truyền

Khi đính kèm một kiểu truyền tùy chỉnh vào một mô hình, các tham số truyền có thể được chỉ định bằng cách tách chúng khỏi tên lớp bằng cách sử dụng ký tự

$firstName = $user->first_name;

61 và nhiều tham số được phân tách bằng dấu phẩy. Các tham số sẽ được chuyển đến hàm tạo của lớp cast

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

1

vật đúc

Bạn có thể muốn cho phép các đối tượng giá trị của ứng dụng của mình xác định các lớp truyền tùy chỉnh của riêng chúng. Thay vì đính kèm lớp truyền tùy chỉnh vào mô hình của bạn, bạn có thể đính kèm một lớp đối tượng giá trị thực hiện giao diện

$firstName = $user->first_name;

62

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

2

Các đối tượng triển khai giao diện

$firstName = $user->first_name;

63 phải xác định phương thức

$firstName = $user->first_name;

64 trả về tên lớp của lớp caster tùy chỉnh chịu trách nhiệm truyền tới và từ lớp

$firstName = $user->first_name;

63

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

3

Khi sử dụng các lớp

$firstName = $user->first_name;

63, bạn vẫn có thể cung cấp các đối số trong định nghĩa

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

66. Các đối số sẽ được chuyển đến phương thức

$firstName = $user->first_name;

64

$user->address->lineOne = 'Updated Address Line 1 Value';

$user->address->lineTwo = 'Updated Address Line 2 Value';

4

Castables & Lớp diễn viên ẩn danh

Bằng cách kết hợp "có thể truyền" với các lớp ẩn danh của PHP, bạn có thể định nghĩa một đối tượng giá trị và logic truyền của nó dưới dạng một đối tượng có thể truyền. Để thực hiện điều này, hãy trả về một lớp ẩn danh từ phương thức

$firstName = $user->first_name;

64 của đối tượng giá trị của bạn. Lớp ẩn danh nên triển khai giao diện

$firstName = $user->first_name;

38

PHP có hỗ trợ truyền kiểu không?

Cách mà PHP có thể gán một kiểu dữ liệu cụ thể cho bất kỳ biến nào được gọi là typecasting. Loại biến bắt buộc được đề cập trong ngoặc đơn trước biến. PHP không hỗ trợ kiểu dữ liệu khai báo biến .

Kiểu truyền trong PHP với ví dụ là gì?

Truyền kiểu chuyển đổi giá trị thành loại đã chọn bằng cách viết loại trong dấu ngoặc đơn trước giá trị cần chuyển đổi . Các diễn viên được phép là. [int] - chuyển thành int. [bool] - chuyển thành bool.

Truyền kiểu dữ liệu là gì?

Truyền kiểu là quá trình trong đó trình biên dịch tự động chuyển đổi một kiểu dữ liệu trong chương trình sang một kiểu dữ liệu khác . Chuyển đổi kiểu là tên gọi khác của ép kiểu. Chẳng hạn, nếu một lập trình viên muốn lưu trữ một giá trị biến dài thành một số nguyên đơn giản trong chương trình, thì họ có thể nhập lệnh này long vào int.

Chức năng được sử dụng trong kiểu truyền trong PHP là gì?

Chúng ta đã sử dụng hàm có sẵn trong PHP var_dump[] để hiển thị kiểu dữ liệu của biến được khai báo. Và chúng tôi đã sử dụng truyền kiểu dữ liệu để thay đổi kiểu dữ liệu trước đó và sau đó sử dụng lại var_dump để hiển thị kiểu dữ liệu đã thay đổi.

Chủ Đề