繁体   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