假设这个雄辩的模型:
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
,这很好,但是我不能使用原始属性和另一个内部对象数据来实现。
如何实现?
编辑:
由于我使用了令人困惑的示例(User和DeletedUser),因此我将使用另一个示例。假设一个主要的汽车类。我想建立一个Factory方法来查找以检索Automobile子级,它可以是AutomaticAutomobile或ManualAutomobile对象。因此,如果我调用Automobile::find($id)
,则该方法必须返回AutomaticAutomobile或ManualAutomobile实例。我要避免的是再次查询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;
}
}
}
答案 0 :(得分:0)
如果AutomaticAutomobile和ManualAutomobile是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;
}
}