| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | <?php
namespace Database\Factories\Common;
use App\Models\Common\Contact;
use Database\Factories\Concerns\HasParentRelationship;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
 * @extends Factory<Contact>
 */
class ContactFactory extends Factory
{
    use HasParentRelationship;
    /**
     * The name of the factory's corresponding model.
     */
    protected $model = Contact::class;
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'company_id' => 1,
            'first_name' => $this->faker->firstName,
            'last_name' => $this->faker->lastName,
            'email' => $this->faker->unique()->safeEmail,
            'phones' => $this->generatePhones(),
            'is_primary' => $this->faker->boolean(50),
            'created_by' => 1,
            'updated_by' => 1,
        ];
    }
    protected function generatePhones(): array
    {
        $phones = [];
        if ($this->faker->boolean(80)) {
            $phones[] = [
                'data' => ['number' => $this->faker->phoneNumber],
                'type' => 'primary',
            ];
        }
        if ($this->faker->boolean(50)) {
            $phones[] = [
                'data' => ['number' => $this->faker->phoneNumber],
                'type' => 'mobile',
            ];
        }
        if ($this->faker->boolean(30)) {
            $phones[] = [
                'data' => ['number' => $this->faker->phoneNumber],
                'type' => 'toll_free',
            ];
        }
        if ($this->faker->boolean(10)) {
            $phones[] = [
                'data' => ['number' => $this->faker->phoneNumber],
                'type' => 'fax',
            ];
        }
        return $phones;
    }
    public function primary(): self
    {
        return $this->state([
            'is_primary' => true,
        ]);
    }
    public function secondary(): self
    {
        return $this->state([
            'is_primary' => false,
        ]);
    }
}
 |