Вход Регистрация
Файл: src/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factory.php
Строк: 196
<?php

namespace IlluminateDatabaseEloquent;

use 
ArrayAccess;
use 
FakerGenerator as Faker;
use 
SymfonyComponentFinderFinder;

class 
Factory implements ArrayAccess
{
    
/**
     * The Faker instance for the builder.
     *
     * @var FakerGenerator
     */
    
protected $faker;

    
/**
     * Create a new factory instance.
     *
     * @param  FakerGenerator  $faker
     * @return void
     */
    
public function __construct(Faker $faker)
    {
        
$this->faker = $faker;
    }

    
/**
     * The model definitions in the container.
     *
     * @var array
     */
    
protected $definitions = [];

    
/**
     * Create a new factory container.
     *
     * @param  FakerGenerator  $faker
     * @param  string|null  $pathToFactories
     * @return static
     */
    
public static function construct(Faker $faker, $pathToFactories = null)
    {
        
$pathToFactories = $pathToFactories ?: database_path('factories');

        return (new static(
$faker))->load($pathToFactories);
    }

    
/**
     * Define a class with a given short-name.
     *
     * @param  string  $class
     * @param  string  $name
     * @param  callable  $attributes
     * @return void
     */
    
public function defineAs($class, $name, callable $attributes)
    {
        return 
$this->define($class, $attributes, $name);
    }

    
/**
     * Define a class with a given set of attributes.
     *
     * @param  string  $class
     * @param  callable  $attributes
     * @param  string  $name
     * @return void
     */
    
public function define($class, callable $attributes, $name = 'default')
    {
        
$this->definitions[$class][$name] = $attributes;
    }

    
/**
     * Create an instance of the given model and persist it to the database.
     *
     * @param  string  $class
     * @param  array  $attributes
     * @return mixed
     */
    
public function create($class, array $attributes = [])
    {
        return 
$this->of($class)->create($attributes);
    }

    
/**
     * Create an instance of the given model and type and persist it to the database.
     *
     * @param  string  $class
     * @param  string  $name
     * @param  array  $attributes
     * @return mixed
     */
    
public function createAs($class, $name, array $attributes = [])
    {
        return 
$this->of($class, $name)->create($attributes);
    }

    
/**
     * Load factories from path.
     *
     * @param  string  $path
     * @return $this
     */
    
public function load($path)
    {
        
$factory = $this;

        if (
is_dir($path)) {
            foreach (
Finder::create()->files()->in($path) as $file) {
                require 
$file->getRealPath();
            }
        }

        return 
$factory;
    }

    
/**
     * Create an instance of the given model.
     *
     * @param  string  $class
     * @param  array  $attributes
     * @return mixed
     */
    
public function make($class, array $attributes = [])
    {
        return 
$this->of($class)->make($attributes);
    }

    
/**
     * Create an instance of the given model and type.
     *
     * @param  string  $class
     * @param  string  $name
     * @param  array  $attributes
     * @return mixed
     */
    
public function makeAs($class, $name, array $attributes = [])
    {
        return 
$this->of($class, $name)->make($attributes);
    }

    
/**
     * Get the raw attribute array for a given named model.
     *
     * @param  string  $class
     * @param  string  $name
     * @param  array  $attributes
     * @return array
     */
    
public function rawOf($class, $name, array $attributes = [])
    {
        return 
$this->raw($class, $attributes, $name);
    }

    
/**
     * Get the raw attribute array for a given model.
     *
     * @param  string  $class
     * @param  array  $attributes
     * @param  string  $name
     * @return array
     */
    
public function raw($class, array $attributes = [], $name = 'default')
    {
        
$raw = call_user_func($this->definitions[$class][$name], $this->faker);

        return 
array_merge($raw, $attributes);
    }

    
/**
     * Create a builder for the given model.
     *
     * @param  string  $class
     * @param  string  $name
     * @return IlluminateDatabaseEloquentFactoryBuilder
     */
    
public function of($class, $name = 'default')
    {
        return new 
FactoryBuilder($class, $name, $this->definitions, $this->faker);
    }

    
/**
     * Determine if the given offset exists.
     *
     * @param  string  $offset
     * @return bool
     */
    
public function offsetExists($offset)
    {
        return isset(
$this->definitions[$offset]);
    }

    
/**
     * Get the value of the given offset.
     *
     * @param  string  $offset
     * @return mixed
     */
    
public function offsetGet($offset)
    {
        return 
$this->make($offset);
    }

    
/**
     * Set the given offset to the given value.
     *
     * @param  string  $offset
     * @param  callable  $value
     * @return void
     */
    
public function offsetSet($offset, $value)
    {
        return 
$this->define($offset, $value);
    }

    
/**
     * Unset the value at the given offset.
     *
     * @param  string  $offset
     * @return void
     */
    
public function offsetUnset($offset)
    {
        unset(
$this->definitions[$offset]);
    }
}
Онлайн: 1
Реклама