Server IP : 192.158.238.246 / Your IP : 3.137.202.126 Web Server : LiteSpeed System : Linux uniform.iwebfusion.net 4.18.0-553.27.1.lve.1.el8.x86_64 #1 SMP Wed Nov 20 15:58:00 UTC 2024 x86_64 User : jenniferflocom ( 1321) PHP Version : 8.1.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/7779/task/7779/cwd/plugins/give/src/Framework/Models/Factories/ |
Upload File : |
<?php namespace Give\Framework\Models\Factories; use Exception; use Faker\Generator; use Give\Framework\Database\DB; /** * @template M */ abstract class ModelFactory { /** * @var class-string<M> */ protected $model; /** * @var Generator */ protected $faker; /** * @var int The number of models to create. */ protected $count = 1; /** * @since 2.20.0 * * @param class-string<M> $model * * @return void */ public function __construct($model) { $this->model = $model; $this->faker = $this->withFaker(); } /** * Define the model's default state. */ abstract public function definition(): array; /** * @since 2.20.0 * * @param array $attributes * * @return M|M[] */ public function make(array $attributes = []) { $results = []; for ($i = 0; $i < $this->count; $i++) { $instance = $this->makeInstance($attributes); $results[] = $instance; } return $this->count === 1 ? $results[0] : $results; } /** * @since 2.20.0 * * @param array $attributes * * @return M|M[] * @throws Exception */ public function create(array $attributes = []) { $instances = $this->make($attributes); $instances = is_array($instances) ? $instances : [$instances]; DB::transaction(function () use ($instances) { foreach ($instances as $instance) { $instance->save(); } }); return $this->count === 1 ? $instances[0] : $instances; } /** * Creates an instance of the model from the attributes and definition. * * @since 2.23.0 * * @return M */ protected function makeInstance(array $attributes) { return new $this->model(array_merge($this->definition(), $attributes)); } /** * Get a new Faker instance. * * @since 2.20.0 */ protected function withFaker(): Generator { return give()->make(Generator::class); } /** * Configure the factory. * * @since 2.20.0 */ public function configure(): self { return $this; } /** * Sets the number of models to generate. * * @since 2.20.0 */ public function count(int $count): self { $this->count = $count; return $this; } }