支持这个雄辩的模型:
class User extends Model
{
protected $table = 'users';
}
而这个:
class DeletedUser extends User
{
public function someDeletedUserFunction()
{
// ... some stuff here
}
}
如果我执行$user = User::find(1)
和$deletedUser = new DeletedUser()
,如何将对象$user
中的数据复制到$deletedUser
对象?
我正在尝试使用 $deletedUser->attributes = $user->getAttributes
,这很好,但我无法使用原始属性和另一个内部对象数据来做到这一点。
如何实现这一目标?
编辑:由于我使用的示例(用户和已删除用户(令人困惑,我将使用另一个示例。主类汽车。我想构建一个工厂方法查找以检索汽车子项,它可以是自动汽车或手动汽车对象。因此,如果我调用Automobile::find($id)
该方法必须返回自动汽车或手动汽车实例。我想避免的是再次查询 db,所以我查询获取 Automobile 第一个对象,然后用 Automobile 对象的数据实例化一个子对象。这个例子比以前更清楚吗?
请参阅此代码作为工厂示例:
class AutomobileFactory
{
const MANUAL_AUTOMOBILE= 0;
const AUTOMATIC_AUTOMOBILE= 1;
static function create(int $rewardType, array $data)
{
switch($rewardType){
case self::AUTOMATIC_AUTOMOBILE:
return AutomaticAutomobile::create($data);
break;
case self::MANUAL_AUTOMOBILE:
return ManualAutomobile::create($data);
break;
default:
throw new Exception("Not supported");
}
}
static function find(int $rewardType, int $id) : Reward
{
$automobile = Automobile::find($id);
switch($rewardType){
case self::AUTOMATIC_AUTOMOBILE:
$automatic = someCopyMethods()... // Here I copy all the data
return $automatic;
break;
case self::MANUAL_AUTOMOBILE:
$manual= someCopyMethods()... // Here I copy all the data
return $manual;
break;
default:
throw new Exception("Not supported");
return null;
}
}
}
如果AutomaticAutomotive和ManualAutomotive是Automobile的子代,你为什么不这样做:
static function find(int $rewardType, int $id) : Reward
{
switch($rewardType){
case self::AUTOMATIC_AUTOMOBILE:
$automatic = AutomaticAutomobile::find($id);
return $automatic;
break;
case self::MANUAL_AUTOMOBILE:
$manual= ManualAutomobile::find($id);
return $manual;
break;
default:
throw new Exception("Not supported");
return null;
}
}