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àyclass 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 ranew SongData['Never gonna give you up', 'Rick Astley'];
0sá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ệuVí 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'];
1Bâ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ấyBạ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'];
3Từ 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'];
4Cũ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'];
5Bâ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'];
6Có 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
9 trên nóSongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
- Một yêu cầu của Laravel bằng cách gọi
0 trên đóclass Song extends Model{ }
- An Arrayable bằng cách gọi
9 trên đóSongData::from[['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']];
- 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 ratạ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{
}
6new SongData['Never gonna give you up', 'Rick Astley'];
7Bê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ề nullSá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'];
8Sá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ọiVí 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ư saunew SongData['Never gonna give you up', 'Rick Astley'];
9Bâ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']];
0Chú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