Làm cách nào để trả lại một đối tượng trong Laravel?

Câu trả lời là trong háo hức tải. Nhìn vào nó. Bạn có thể có thể làm điều gì đó như thế này $project->load['partners', 'partners. loại']

Cảm ơn cả hai bạn. Có, tôi đã xem qua toàn bộ phần Eloquent của tài liệu, nhưng một số trong số này là mới [đặc biệt là thuật ngữ] và sẽ yêu cầu một số lần vượt qua. Tôi thực sự ấn tượng với Laravel cho đến nay

Bạn có thể sử dụng phương pháp

SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
3 để tạo một đối tượng dữ liệu từ hầu hết mọi thứ. Ví dụ: giả sử bạn có một mô hình Eloquent như thế này

class Song extends Model{

}

Bạn có thể tạo một đối tượng dữ liệu từ một mô hình như thế này

SongData::from[Song::firstOrFail[$id]];

Dữ liệu cũng có thể được tạo từ các chuỗi JSON

SongData::from['{"name" : "Never Gonna Give You Up","artist" : "Rick Astley"}'];

Gói sẽ tìm các thuộc tính cần thiết trong mô hình và sử dụng chúng để xây dựng đối tượng dữ liệu

Mặc dù PHP 8. Các thuộc tính hàm tạo 0 trông tuyệt vời trong các đối tượng dữ liệu, việc sử dụng các thuộc tính thông thường mà không có hàm tạo như vậy là hoàn toàn hợp lệ

class SongData extends Data
{
    public string $title;
    public string $artist;
}

Ánh xạ tên thuộc tính

Đôi khi, tên thuộc tính trong mảng mà bạn đang tạo đối tượng dữ liệu có thể khác. Bạn có thể xác định tên khác cho một thuộc tính khi nó được tạo từ mảng bằng các thuộc tính

class ContractData extends Data
{
    public function __construct[
        public string $name,
        #[MapInputName['record_company']]
        public string $recordCompany,
    ] {
    }
}

Tạo đối tượng dữ liệu bây giờ có thể được thực hiện như vậy

SongData::from[['name' => 'Rick Astley', 'record_company' => 'RCA Records']];

Thay đổi tất cả các tên thuộc tính trong một đối tượng dữ liệu thành Snake_case trong dữ liệu mà đối tượng được tạo từ đó có thể được thực hiện như vậy

#[MapInputName[SnakeCaseMapper::class]]
class ContractData extends Data
{
    public function __construct[
        public string $name,
        public string $recordCompany,
    ] {
    }
}

Bạn cũng có thể sử dụng thuộc tính

SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
4 khi muốn kết hợp ánh xạ tên thuộc tính đầu vào [xem ] và đầu ra

new SongData['Never gonna give you up', 'Rick Astley'];
0

sáng tạo kỳ diệu

Có thể ghi đè hoặc mở rộng hành vi của phương thức

SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
3 cho các loại cụ thể. Vì vậy, bạn có thể xây dựng một đối tượng dữ liệu theo cách cụ thể cho loại đó. Điều này có thể được thực hiện bằng cách thêm một phương thức tĩnh bắt đầu bằng 'từ' vào đối tượng dữ liệu

Ví dụ: chúng tôi muốn thay đổi cách chúng tôi tạo một đối tượng dữ liệu từ một mô hình. Chúng ta có thể thêm một phương thức tĩnh

SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
6 lấy mô hình mà chúng ta muốn sử dụng làm tham số

new SongData['Never gonna give you up', 'Rick Astley'];
1

Bây giờ khi tạo một đối tượng dữ liệu từ một mô hình như thế này

SongData::from[Song::firstOrFail[$id]];

Thay vì phương thức mặc định, phương thức

SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
6 sẽ được gọi để tạo một đối tượng dữ liệu từ mô hình đã tìm thấy

Bạn thực sự được tự do thêm bao nhiêu phương thức từ tùy thích. Ví dụ: bạn có thể thêm một để tạo đối tượng dữ liệu từ một chuỗi

new SongData['Never gonna give you up', 'Rick Astley'];
3

Từ bây giờ, bạn có thể tạo một đối tượng dữ liệu như thế này

new SongData['Never gonna give you up', 'Rick Astley'];
4

Cũng có thể sử dụng nhiều đối số trong phương thức tạo huyền

new SongData['Never gonna give you up', 'Rick Astley'];
5

Bây giờ chúng ta có thể tạo đối tượng dữ liệu như thế này

new SongData['Never gonna give you up', 'Rick Astley'];
6

Có một vài yêu cầu để cho phép tạo đối tượng dữ liệu ma thuật

  • Phương thức phải tĩnh và công khai
  • Phương thức phải bắt đầu bằng from
  • Phương thức không thể được gọi từ

Khi gói không thể tìm thấy một phương thức như vậy cho một loại được cung cấp cho phương thức

SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
3 của đối tượng dữ liệu. Sau đó, đối tượng dữ liệu sẽ cố gắng tự tạo từ các loại sau

  • Một Eloquent model bằng cách gọi
    SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
    
    9 trên nó
  • Một yêu cầu của Laravel bằng cách gọi
    class Song extends Model{
    
    }
    
    0 trên đó
  • An Arrayable bằng cách gọi
    SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
    
    9 trên đó
  • một mảng

Danh sách này có thể được mở rộng bằng cách sử dụng các bộ chuẩn hóa bổ sung, tìm hiểu thêm về danh sách này tại đây

Khi một đối tượng dữ liệu không thể được tạo bằng các phương thức ma thuật hoặc các phương thức mặc định, một ngoại lệ

class Song extends Model{

}
2 sẽ được đưa ra

tạo tùy chọn

Không thể trả về

class Song extends Model{

}
3 từ phương thức
SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
3 của đối tượng dữ liệu vì chúng tôi luôn mong đợi một đối tượng dữ liệu khi gọi
SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
3. Để giải quyết vấn đề này, bạn có thể gọi phương thức
class Song extends Model{

}
6

new SongData['Never gonna give you up', 'Rick Astley'];
7

Bên dưới phương thức tùy chọn sẽ gọi phương thức

SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
3 khi một giá trị được đưa ra, vì vậy bạn vẫn có thể tạo các đối tượng dữ liệu một cách kỳ diệu. Khi một giá trị null được đưa ra, nó sẽ trả về null

Sáng tạo mà không cần phương pháp ma thuật

Bạn có thể bỏ qua các phương thức tạo kỳ diệu khi tạo một đối tượng dữ liệu như vậy

new SongData['Never gonna give you up', 'Rick Astley'];
8

Sáng tạo nâng cao

Bên trong gói này đang sử dụng một đường dẫn để tạo một đối tượng dữ liệu từ một thứ gì đó. Đường ống này tồn tại các bước chuyển đổi thuộc tính thành cấu trúc chính xác và nó có thể được tùy chỉnh hoàn toàn. Bạn có thể đọc thêm về nó ở đây

Nhanh chóng lấy dữ liệu từ Mô hình, Yêu cầu,

Bằng cách thêm đặc điểm

class Song extends Model{

}
8 vào Mô hình, Yêu cầu hoặc bất kỳ lớp nào có thể được chuyển đổi một cách kỳ diệu thành đối tượng dữ liệu, bạn sẽ kích hoạt hỗ trợ cho phương thức
class Song extends Model{

}
9. Phương thức này sẽ tự động tạo một đối tượng dữ liệu cho đối tượng mà nó được gọi

Ví dụ: hãy xem lại mô hình

SongData::from[Song::firstOrFail[$id]];
0 mà chúng ta đã thấy trước đó. Chúng ta có thể thêm đặc điểm
class Song extends Model{

}
8 như sau

new SongData['Never gonna give you up', 'Rick Astley'];
9

Bây giờ chúng ta có thể nhanh chóng lấy đối tượng dữ liệu cho mô hình như vậy

SongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
0

Chúng ta có thể làm tương tự với FormRequest, ở đây chúng ta không sử dụng thuộc tính để xác định lớp dữ liệu mà thay vào đó sử dụng phương thức

Chủ Đề