Это возможно создать объект данных из модели... ...Модель может иметь приведения, эти приведения будут вызываться до создания объекта данных.
Ссылка на документацию
Однако, похоже, что это не так, как в руководстве, потому что единственный способ преобразовать мою модель в объект данных, когда модель содержит перечисление, - это для доступа к свойству до создания экземпляра объекта данных.
Вот Enum, (красноречивый) класс модели и класс данных (отдельные файлы)
Код: Выделить всё
enum CarType: string
{
case Sedan = "Sedan";
case SUV = "SUV";
...
}
class Car extends Model
{
protected function casts(): array
{
return ['type' => CarType::class];
}
}
class CarData extends Data
{
public function __construct(
public CarType $type,
...
) {}
}
app\Data\CarData::__construct(): аргумент №1 ($type) должен иметь тип app\Enums\CarType, указана строка, вызываемая в /var/www/vendor/spatie/laravel-data/src/Resolvers /DataFromArrayResolver.php в строке 95
Однако, если я получу доступ к атрибуту типа в модели, а затем попытаюсь, а затем попытаюсь создать DataObject, это работает так, как ожидалось. Пример:
Код: Выделить всё
$car = Car::find(1);
var_dump($car->type); // Errors without this line
$car_data = CarData::from($car);
var_dump($car_data);
Я вижу здесь несколько возможностей:
- Я неправильно читаю документацию.
- В laravel-е есть ошибка. пакет данных
- Есть опция конфигурации, которую я могу использовать, чтобы гарантировать, что приведения выполняются сразу после создания модели, чтобы она была в хорошем состоянии для создания объекта данных.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -is-called
Мобильная версия