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