Intro
Привет всем,
Недавно я выбрал Laravel, и я все еще изучаю фреймворк (что, кстати, мне кажется удивительным).
Я работаю над проектом, в котором у меня есть модель с именем Order, которую я использую для группировки других моделей Order (например, ClassicOrder, InstantOrder и т. Д.) С использованием отношения морфа один к одному.
В таблице «Заказы» хранятся идентификатор, идентификатор_порядка и тип_заказа, которые используются для отношения морфинга.
Проблема
Я создал фабрику для каждого типа заказаи теперь я хочу создать фабрику, которая генерирует n заказов путем случайного выбора между всеми типами заказов.
Я сделал это так:
$factory->define(Order::class, function (Faker $faker) {
$className = collect(Order::getModels())->random();
$order = factory($className)->create();
return [
'order_id' => $order->id,
'type' => get_class($order)
];
});
Теперь это работает, но проблема в том, что каждый ордер использует черту Order, которая уже регистрирует ордер в таблице ордеров, так чтокогда я вызываю фабрику, я получаю две строки в таблице заказов для одного и того же заказа.
Это черта заказа:
Trait Order {
public static function boot()
{
parent::boot();
self::created(function ($model) {
// Add the order to the orders table to give him a public id
DB::table('orders')->insert(['order_id' => $model->id, 'type' => self::class]);
// Set and create the order path if the order isn't instant
if (!is_a($model, 'App\InstantOrder')) {
$orderType = explode('\\', get_class($model))[1]; // App\OrderType -> OrderType
$folderName = $orderType . '_' . $model->publicId . '_' . time() . '/';
$model->path = public_path() . '/storage/orders/' . $folderName;
$model->save();
File::makeDirectory($model->path, 0777, true);
}
});
self::creating(function ($model) {
$model->{$model->getKeyName()} = Uuid::generate()->string;
});
}
}
Я могу избежать этого, вызвав factory () -> make() вместо factory-> create (), но мне это не кажется правильным.
Вопрос
Я подумал о некоторых решениях и выдал следующее:
- Не заставляйте фабрику ничего возвращать, но похоже, что я могу 't.
- Удалите вставленные строки перед возвратом данных для хранения в таблице «Заказы», и даже если это не очень здорово, это выглядит как единственное решение.
Могу ли я сделать фабрику, ничего не возвращая?
Спасибо и желаю всем хорошего дня.
-Риккардо