[英]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.