eloquent — переопределение публичной функции частной функцией в переполнении стека

Я использую laravel в качестве фреймворка, и мне нравятся объекты Eloquent. Но теперь у меня есть объект Eloquent, который разрешено создавать только в определенных функциях. В обычных случаях я бы делал конструктор и статический метод create приватным и вызывал их из статических функций в этом классе.

Мой класс выглядит так:

class Action extends Model {

public static function create(array $attributes = []) {
parent::create($attributes);
}

private static function customCreate(ActionType $action, Country $from, Country $to){
self::create([
'action' => $action,
'country_from_id' => $from->id,
'country_to_id' => $to->id,
]);
}

public static function attack(Country $from, Country $to) {
if($from->hasNeighbour($to)){
return new self(ActionType::attack(), $from, $to);
}
throw new InvalidActionException('Only neighbours can attack each other');
}
}

В «идеальном мире» я бы хотел, чтобы это выглядело следующим образом:

class Action extends Model {

private static function create(ActionType $action, Country $from, Country $to){
parent::create([
'action' => $action,
'country_from_id' => $from->id,
'country_to_id' => $to->id,
]);
}

public static function attack(Country $from, Country $to) {
if($from->hasNeighbour($to)){
return new self(ActionType::attack(), $from, $to);
}
throw new InvalidActionException('Only neighbours can attack each other');
}
}

Но это решение «идеального мира» не разрешено php из-за 2 сбоев. Во-первых, я не могу переопределить публичный метод приватным методом. Вторая ошибка заключается в том, что метод create несовместим с методом eloquent create (метод eloquent требует аргументов array $attributes = []) …

Каково лучшее решение для достижения чего-то прекрасного, как мой «идеальный мир»?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]