簡體   English   中英

我可以將一個 Eloquent model 投射到另一個上嗎?

[英]Can I cast one Eloquent model to another?

在 eloquent 中,您可以在同一張桌子上運行不同的模型。 那么,是否可以在運行時將 object 從一個 Model 切換到另一個。 假設我們有三個類:

Product extends Model
ProductSet extends Product
SimpleProduct extends Product

ProductSet 和 SimpleProduct 之間的區別在於complex列,其中對於 ProductSet 具有“true”,對於 SimpleProduct 具有“false”。

ProductSet 和 SimpleProduct 模型應用了范圍,因此ProductSet::all()將僅獲得集合,而SimpleProduct::all()將僅獲得簡單產品。

父 model 但是允許我們通過Product::all()獲得這兩種類型的產品,所以,是否可以通過 Product class 的所有實例的 go 並在基於屬性的運行時complex值的更高級別模型上將它們切換到更高級別的模型?

由於您已經在擴展 class ,它擁有與父級相同的道具 您可以遍歷任何product集合並通過getAttributes()方法獲取所有屬性並傳遞給父級。 因為您的每個 model 都在擴展 Eloquent Model ,它接受constructor中的屬性並填充其屬性。

以下示例擴展了默認User class 並轉換回class

<?php

namespace App;

class Admin extends User {}

獲取所有Admins並將其轉換為User

$admins = \App\Admin::all();

$users = [];
foreach ($admins as $admin) {
    $users[] = new \App\User($admin->getAttributes());
}
dd(collect($users));

是的,您可以這樣做,根據您必須創建特定 class 的 object 的道具

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM