Supose this Eloquent Модель:
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.Чего я хочу избежать, так это снова запрашивать базу данных, поэтому я запрашиваю сначала получение объекта 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;
}
}
}