Verification: a143cc29221c9be0

Php artisan db seed что это

Инструкции по обновлению Laravel до версии 8.0 с версии 7.x

  • Обновление Laravel до 8.0 с 7.x
  • Изменения, оказывающие большое влияние
    • Model Factories
    • Метод retryAfter очереди
    • Свойство timeoutAt очереди
    • Методы allOnQueue и allOnConnection очереди
    • Пагинация по умолчанию
    • Пространства имен Seeder и Factory
  • Изменения со средней степенью воздействия
    • Требуется PHP 7.3.0
    • Пакетная поддержка таблицы невыполненных заданий
    • Поддержка режима обновления
    • Опции php artisan down --message
    • Метод assertExactJson

  • Обновление Laravel до 8.0 с 7.x
    • Приблизительное время обновления: 15 минут
    • Требуется PHP 7.3.0
    • Обновление зависимостей
    • Коллекции
      • Метод isset
    • База данных
      • Пространства имен Seeder и Factory
    • Eloquen
      • Model Factories
      • Интерфейс Castable
      • События увеличения / уменьшения
    • События
      • Контракт Dispatcher
    • Фреймворк
      • Поддержка режима обновления
      • Опция php artisan down --message
      • Опция php artisan serve --no-reload
      • Свойство $app Менеджера
      • Хэлпер elixir
    • Почта
      • Метод sendNow
    • Пагинация
      • Пагинация по умолчанию
    • Очередь
      • Метод retryAfter
      • Свойство timeoutAt
      • Методы allOnQueue() / allOnConnection()
      • Пакетная поддержка таблицы невыполненных заданий
    • Маршрутизация
      • Автоматическое префикс пространства имен контроллера
    • Планирование
      • Библиотека cron-expression
    • Сессия
      • Контракт Session
    • Тестирование
      • Метод decodeResponseJson
      • Метод assertExactJson
    • Валидация
    • Подключения правил базы данных
    • Прочее

Обновление Laravel до 8.0 с 7.x

Приблизительное время обновления: 15 минут

Мы стараемся задокументировать все возможные критические изменения. Поскольку некоторые из этих критических изменений находятся в малоизвестных частях фреймворка, только часть этих изменений может повлиять на ваше приложение.

Требуется PHP 7.3.0

Вероятность воздействия: средняя

Новая минимальная версия PHP теперь 7.3.0.

Обновление зависимостей

Обновите следующие зависимости в файле composer.json:

  • guzzlehttp/guzzle до ^7.0.1
  • facade/ignition до ^2.3.6
  • laravel/framework до ^8.0
  • laravel/ui до ^3.0
  • nunomaduro/collision до ^5.0
  • phpunit/phpunit до ^9.0

Следующие основные пакеты имеют новые основные выпуски для поддержки Laravel 8. Хорошо бы вам прочитать соответствующие руководства по обновлению перед обновлением:

  • Horizon v5.0
  • Passport v10.0
  • Socialite v5.0
  • Telescope v4.0

Кроме того, установщик Laravel был обновлен для поддержки composer create-project и Laravel Jetstream. Любой установщик старше 4.0 перестанет работать после октября 2020 года. Вам следует как можно скорее обновить глобальный установщик до ^ 4.0.

Наконец, изучите любые другие сторонние пакеты, используемые вашим приложением, и убедитесь, что вы используете правильную версию для поддержки Laravel 8.

Коллекции

Метод isset

Вероятность воздействия: низкая

Чтобы соответствовать типичному поведению PHP, метод offsetExists в Illuminate\Support\Collection был обновлен для использования isset вместо array_key_exists. Это может привести к изменению поведения при работе с элементами коллекции, имеющими значение null:

$collection = collect([null]);

// Laravel 7.x - истина
isset($collection[0]);

// Laravel 8.x - ложь
isset($collection[0]);

База данных

Пространства имен Seeder и Factory

Вероятность воздействия: высокая

Seeders и factories теперь имеют пространство имен. Чтобы учесть эти изменения, добавьте пространство имен Database\Seeders в классы сидера. Кроме того, бывший ранее каталог database/seeds следует переименовать в database/seeders:

Если вы решили использовать пакет laravel/legacy-factories, никаких изменений в ваших фабричных классах не требуется. Однако, если вы обновляете свои фабрики, вам следует добавить к этим классам пространство имен Database\Factories.

Затем в своем файле composer.json удалите блок classmap из раздела autoload и добавьте новые сопоставления каталога классов с пространством имен:

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Database\\Factories\\": "database/factories/",
        "Database\\Seeders\\": "database/seeders/"
    }
},

Eloquent

Model Factories

Вероятность воздействия: высокая

Функция фабрик моделей Laravel была полностью переписана для поддержки классов и несовместима с фабриками стиля Laravel 7.x. Однако, чтобы упростить процесс обновления, был создан новый пакет laravel/legacy-factories, чтобы продолжать использовать ваши существующие фабрики с Laravel 8.x. Вы можете установить этот пакет через Composer:

composer require laravel/legacy-factories

Интерфейс Castable

Вероятность воздействия: низкая

Метод castUsing интерфейса Castable обновлен и теперь принимает массив аргументов. Если вы реализуете этот интерфейс, вам следует соответствующим образом обновить свою реализацию этого метода:

public static function castUsing(array $arguments);

События увеличения / уменьшения

Вероятность воздействия: низкая

Правильные события модели, связанные с «update» и «save», теперь будут отправляться при выполнении методов increment или decrement в экземплярах модели Eloquent.

События

Контракт Dispatcher

Вероятность воздействия: низкая

Метод listen контракта Illuminate\Contracts\Events\Dispatcher был обновлен, чтобы сделать свойство $listener необязательным. Это изменение было внесено для поддержки автоматического определения обрабатываемых типов событий через отражение. Если вы реализуете этот интерфейс вручную, вам следует соответствующим образом обновить свою реализацию:

public function listen($events, $listener = null);

Фреймворк

Поддержка режима обновления

Вероятность воздействия: необязательно

Функция режима обслуживания Laravel была улучшена в Laravel 8.x. Теперь поддерживается предварительный рендеринг шаблона режима обслуживания, что исключает вероятность того, что конечные пользователи столкнутся с ошибками в режиме обслуживания. Однако для поддержки этого в ваш файл public/index.php необходимо добавить следующие строки. Эти строки следует разместить непосредственно под существующим определением константы LARAVEL_START:

define('LARAVEL_START', microtime(true));

if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {
    require __DIR__.'/../storage/framework/maintenance.php';
}

Опция php artisan down --message

Вероятность воздействия: средняя

Параметр --message команды php artisan down был удален. В качестве альтернативы рассмотрите возможность предварительной визуализации представлений в режиме обслуживания с выбранным вами сообщением.

Опция php artisan serve --no-reload

Вероятность воздействия: низкая

В команду php artisan serve добавлена опция --no-reload. Это даст указание встроенному серверу не перезагружать сервер при обнаружении изменений файла среды. Эта опция в первую очередь полезна при запуске тестов Laravel Dusk в среде CI.

Свойство $app Менеджера

Вероятность воздействия: низкая

Ранее устаревшее свойство $app класса Illuminate\Support\Manager было удалено. Если вы полагались на это свойство, вам следует использовать вместо него свойство $container.

Хэлпер elixir

Вероятность воздействия: низкая

Удален ранее устаревший помощник для elixir. Приложениям, все еще использующим этот метод, рекомендуется перейти на Laravel Mix.

Почта

Метод sendNow

Вероятность воздействия: низкая

Ранее устаревший метод sendNow был удален. Вместо этого используйте метод send.

Пагинация

Пагинация по умолчанию

Вероятность воздействия: высокая

Пагинатор теперь использует фреймворк Tailwind CSS для своего стиля по умолчанию. Чтобы продолжать использовать Bootstrap, вам следует добавить boot метод к методу загрузки AppServiceProvider вашего приложения:

use Illuminate\Pagination\Paginator;

Paginator::useBootstrap();

Очередь

Метод retryAfter

Вероятность воздействия: высокая

Для согласованности с другими функциями Laravel метод retryAfter и свойство retryAfter заданий в очереди, почтовых программ, уведомлений и слушателей были переименованы в backoff. Вам следует обновить имя этого метода / свойства в соответствующих классах вашего приложения.

Свойство timeoutAt

Вероятность воздействия: высокая

Свойство timeoutAt заданий в очереди, уведомлений и прослушивателей было переименовано в retryUntil. Вам следует обновить имя этого свойства в соответствующих классах вашего приложения.

Методы allOnQueue() / allOnConnection()

Вероятность воздействия: высокая

Для согласованности с другими методами диспетчеризации были удалены методы allOnQueue() и allOnConnection(), используемые с цепочкой заданий. Вместо этого вы можете использовать методы onQueue() и onConnection(). Эти методы следует вызвать перед вызовом метода отправки:

ProcessPodcast::withChain([
    new OptimizePodcast,
    new ReleasePodcast
])->onConnection('redis')->onQueue('podcasts')->dispatch();

Обратите внимание, что это изменение влияет только на код, использующий метод withChain. allOnQueue() и allOnConnection() по-прежнему доступны при использовании глобального помощника dispatch().

Пакетная поддержка таблицы невыполненных заданий

Вероятность воздействия: необязательно

Если вы планируете использовать функции пакетной обработки заданий Laravel 8.x, ваша таблица базы данных failed_jobs должна быть обновлена. Во-первых, в вашу таблицу нужно добавить новый столбец uuid:

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::table('failed_jobs', function (Blueprint $table) {
    $table->string('uuid')->after('id')->nullable()->unique();
});

Затем параметр конфигурации failed.driver в файле конфигурации queue должен быть обновлен до database-uuids.

Кроме того, вы можете создать UUID для существующих неудачных заданий:

DB::table('failed_jobs')->whereNull('uuid')->cursor()->each(function ($job) {
    DB::table('failed_jobs')
        ->where('id', $job->id)
        ->update(['uuid' => (string) Illuminate\Support\Str::uuid()]);
});

Маршрутизация

Автоматическое префикс пространства имен контроллера

Вероятность воздействия: необязательно

В предыдущих выпусках Laravel класс RouteServiceProvider содержал свойство $namespace со значением App\Http\Controllers. Это значение этого свойства использовалось для автоматического префикса объявлений маршрута контроллера и генерации URL маршрута контроллера, например, при вызове хэлпера action.

В Laravel 8 для этого свойства по умолчанию установлено значение null. Это позволяет объявлениям маршрута вашего контроллера использовать стандартный вызываемый синтаксис PHP, который обеспечивает лучшую поддержку перехода к классу контроллера во многих IDE:

use App\Http\Controllers\UserController;

// Использование вызываемого синтаксиса PHP...
Route::get('/users', [UserController::class, 'index']);

// Использование строкового синтаксиса...
Route::get('/users', 'App\Http\Controllers\UserController@index');

В большинстве случаев это не повлияет на приложения, которые обновляются, потому что ваш RouteServiceProvider по-прежнему будет содержать свойство $namespace с его предыдущим значением. Однако, если вы обновите свое приложение, создав новый проект Laravel, вы можете столкнуться с этим в качестве критического изменения.

Если вы хотите продолжить использование исходной маршрутизации контроллера с автоматическим префиксом, вы можете просто установить значение свойства $namespace в своем RouteServiceProvider и обновить регистрации маршрута в методе boot, чтобы использовать свойство $namespace:

class RouteServiceProvider extends ServiceProvider
{
    /**
     * Путь к «домашнему» маршруту для вашего приложения.
     *
     * Это используется аутентификацией Laravel для перенаправления
     * пользователей после входа в систему.
     *
     * @var string
     */
    public const HOME = '/home';

    /**
     * Если указано, это пространство имен автоматически применяется
     * к маршрутам вашего контроллера.
     *
     * Кроме того, он устанавливается как корневое пространство имен генератора URL.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Определите привязки модели маршрута, фильтры шаблонов и т.д.
     *
     * @return void
     */
    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));

            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));
        });
    }

    /**
     * Настройте ограничители скорости для приложения.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60);
        });
    }
}

Планирование

Библиотека cron-expression

Вероятность воздействия: низкая

Зависимость Laravel от dragonmantank/cron-expression была обновлена с 2.x до 3.x. Это не должно вызывать каких-либо критических изменений в вашем приложении, если вы не взаимодействуете напрямую с библиотекой cron-expression. Если вы напрямую взаимодействуете с этой библиотекой, просмотрите ее журнал изменений.

Сессия

Контракт Session

Вероятность воздействия: низкая

Контракт Illuminate\Contracts\Session\Session получил новый метод pull. Если вы реализуете этот контракт вручную, вам следует соответствующим образом обновить свою реализацию:

/**
 * Получите значение данного ключа и забудьте его.
 *
 * @param  string  $key
 * @param  mixed  $default
 * @return mixed
 */
public function pull($key, $default = null);

Тестирование

Метод decodeResponseJson

Вероятность воздействия: низкая

Метод decodeResponseJson, принадлежащий классу Illuminate\Testing\TestResponse, больше не принимает никаких аргументов. Вместо этого рассмотрите возможность использования метода json.

Метод assertExactJson

Вероятность воздействия: средняя

Метод assertExactJson теперь требует, чтобы числовые ключи сравниваемых массивов совпадали и располагались в том же порядке. Если вы хотите сравнить JSON с массивом, не требуя, чтобы массивы с числовыми ключами имели одинаковый порядок, вы можете вместо этого использовать метод assertSimilarJson.

Валидация

Подключения правил базы данных

Вероятность воздействия: низкая

Правила unique и exists теперь будут поддерживаться указанным именем соединения (доступным через метод getConnectionName модели) моделей Eloquent при выполнении запросов.

Вступление

Laravel включает в себя простой метод заполнения вашей базы данных тестовыми данными с использованием начальных классов. Все начальные классы хранятся в каталоге. Классы семян могут иметь любое имя, которое вы пожелаете, но, вероятно, должны следовать некоторым разумным соглашениям, таким как и т. Д. По умолчанию класс определен для вас. Из этого класса вы можете использовать метод для запуска других начальных классов, что позволяет вам контролировать порядок заполнения.database/seedsUsersTableSeederDatabaseSeedercall

Письменные сеялки

Чтобы создать сеялку, выполните команду Artisan . Все генерируемые фреймворком сеялки будут помещены в каталог:make:seeder database/seeds

php artisan make:seeder UsersTableSeeder

Класс сеялки содержит только один метод по умолчанию: run. Этот метод вызывается при выполнении команды Artisan . В рамках этого метода вы можете вставить данные в свою базу данных по своему усмотрению. Вы можете использовать построитель запросов для ручной вставки данных или использовать фабрики моделей Eloquent .db:seed run

Массовая защита назначений автоматически отключается при заполнении базы данных.

В качестве примера давайте изменим DatabaseSeederкласс по умолчанию и добавим оператор вставки базы данных в runметод:

insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

Вы можете напечатать любые зависимости, которые вам нужны, в runсигнатуре метода. Они будут автоматически разрешены через сервисный контейнер Laravel .

Использование модельных фабрик

Конечно, ручное указание атрибутов для каждого семени модели является обременительным. Вместо этого вы можете использовать фабрики моделей для удобного создания большого количества записей базы данных. Сначала просмотрите документацию фабрики моделей, чтобы узнать, как определить ваши фабрики. После того как вы определили свои фабрики, вы можете использовать factoryвспомогательную функцию для вставки записей в вашу базу данных.

Например, давайте создадим 50 пользователей и прикрепим отношения к каждому пользователю:

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    factory(App\User::class, 50)->create()->each(function ($user) {
        $user->posts()->save(factory(App\Post::class)->make());
    });
}

Вызов дополнительных сеялок

Внутри DatabaseSeederкласса вы можете использовать callметод для выполнения дополнительных начальных классов. Использование этого callметода позволяет разбить начальное содержимое базы данных на несколько файлов, чтобы ни один класс сеялок не становился слишком большим. Передайте имя класса сеялки, который вы хотите запустить:

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    $this->call([
        UsersTableSeeder::class,
        PostsTableSeeder::class,
        CommentsTableSeeder::class,
    ]);
}

SOLUTION 1 :

Two possible solutions:

  1. Check the namespace of your class

  2. Run composer dump-autoload: composer dump-autoload (docs: https://getcomposer.org/doc/03-cli.md#dump-autoload-dumpautoload-)