seeder laravel что это
Database: Seeding
Introduction
Laravel includes the ability to seed your database with data using seed classes. All seed classes are stored in the database/seeders directory. By default, a DatabaseSeeder class is defined for you. From this class, you may use the call method to run other seed classes, allowing you to control the seeding order.
Writing Seeders
To generate a seeder, execute the make:seeder Artisan command. All seeders generated by the framework will be placed in the database/seeders directory:
As an example, let’s modify the default DatabaseSeeder class and add a database insert statement to the run method:
You may type-hint any dependencies you need within the run method’s signature. They will automatically be resolved via the Laravel service container.
Using Model Factories
Of course, manually specifying the attributes for each model seed is cumbersome. Instead, you can use model factories to conveniently generate large amounts of database records. First, review the model factory documentation to learn how to define your factories.
For example, let’s create 50 users that each has one related post:
Calling Additional Seeders
Within the DatabaseSeeder class, you may use the call method to execute additional seed classes. Using the call method allows you to break up your database seeding into multiple files so that no single seeder class becomes too large. The call method accepts an array of seeder classes that should be executed:
Running Seeders
Forcing Seeders To Run In Production
Сиды и фабрики. Тестовые данные (Урок 3)
Настало время заполнить наши созданные таблицы тестовыми данными, для этого в Laravel существуют сиды или как правильно их называть seeding.
Классы для работы с этими сидами располагаются по адресу: database\seeds. Откройте в этой папке файл DatabaseSeeder.php
В этом файле мы будем прописывать запуск всех наших сидов и фабрик о которых мы поговорим чуть позже.
Теперь создадим наши первый сиды, вот такими командами:
Откройте файл database\seeds\UsersTableSeeder.php и вставьте в него следующий код:
Таким образом, когда мы запустим сиды у нас появится 5 пользователей, у одного мы будем знать пароль это qwerty1234 и под ним мы будем авторизовываться у других это будет случайный пароль.
Теперь добавим код в файл database\seeds\BlogCategoriesTableSeeder.php
Тут мы делаем первую категорию, на которую можно будет ссылаться, а потом запускаем цикл и создаем 15 категорий, при этом как вы наверное догадались из кода то когда счетчик в нашем цикле перевалит за 7, то id родительской категории будет ставиться случайным образом от 1 до 7.
Прежде чем запустить сиды, создадим фабрику для наполнения нашей таблицы с постами блога.
Фабрики очень удобны для генерации больших объемов информации. Откройте папку database\factories и создайте файл BlogPostFactory.php со следующим кодом:
Расскажу подробнее о том, что тут происходит. В столбец category_id мы пишем случайный id нашей категории. В столбец user_id, мы поставили единицу, таким образом все посты у нас созданны тем пользователем, от которого у нас есть пароль.
В столбец excerpt мы добавляем случайный текст от 40 до 100 символов.
В столбец content_raw и content_html мы добавялем реальный текст от 1000 до 3000 символов.
Столбец is_published обычно будет в значении 1 и иногда будет встречаться 0 и в зависимости от этого столбец published_at будет заполнен датой от двух месяцев назад до одного дня назад или же будет null в том случае, если пост еще не опубликован.
Столбцы created_at и updated_at будут заполнены датой от 3 до 2 месяцев назад.
У ларавеля есть много своих функций и некоторые из них могут помочь вам для задания значений полей в вашей фабрике. Информацию по этим функциям лучше всего искать в документации ларавеля.
Теперь у нас практически все готово для запуска сидов, осталось прописать в database\seeds\DatabaseSeeder.php нашу фабрику с постами, добавив следующую строчку factory(\App\Models\BlogPost::class, 150)->create(); в метод run. В результате файл DatabaseSeeder.php будет иметь такой вид:
Обратите внимание, что мы указали количество наших постов 150 штук. Теперь запустим наши сиды командой:
У вас должна появится надпись Seeding: UsersTableSeeder Seeding: BlogCategoriesTableSeeder и надпись Database seeding completed succesfully.
Зайдите в вашу базу данных и посмотрите, какие тестовые данные появились в таблице users, blog_categories и blog_posts.
В следующем уроке мы поговорим о маршрутизации и выведем посты нашего блога на страницу.
Laravel Framework Russian Community
Пролог
Начало работы
Архитектурные концепции
Основное
Погружение
Безопасность
База данных
Eloquent ORM
Тестирование
Пакеты
Тестирование · База данных
Введение
Laravel предлагает множество полезных инструментов, чтобы упростить тестирование приложений, использующих базу данных. Фабрики моделей (factory) и наполнители (seeders) позволяют безболезненно создавать записи тестовой базы данных с использованием моделей и отношений Eloquent вашего приложения. Мы обсудим все эти мощные функции в текущей документации.
Сброс базы данных после каждого теста
Прежде чем продолжить, давайте обсудим, как сбрасывать вашу базу данных после каждого из ваших тестов, чтобы данные из предыдущего теста не мешали последующим тестам. Включенный в Laravel трейт Illuminate\Foundation\Testing\RefreshDatabase позаботится об этом за вас. Просто используйте трейт в своем тестовом классе:
Определение фабрик моделей (factory)
Обзор концепции
Сначала поговорим о фабриках моделей Eloquent. При тестировании вам может потребоваться вставить несколько записей в вашу базу данных перед выполнением теста. Вместо того чтобы вручную указывать значение каждого столбца при создании этих тестовых данных, Laravel позволяет вам определять набор атрибутов по умолчанию для каждой из ваших моделей Eloquent, используя фабрики моделей.
Чтобы увидеть пример написания фабрики, взгляните на файл database/factories/UserFactory.php в вашем приложении. Эта фабрика включена во все новые приложения Laravel и содержит следующее определение фабрики:
Генерация фабрик
Чтобы сгенерировать новую фабрику, используйте команду make:factory Artisan:
Эта команда поместит новый класс фабрики в каталог database/factories вашего приложения.
Соглашение для определения моделей и фабрик
Затем определите свойство model в соответствующей фабрике:
Состояния фабрик
Методы преобразования состояния обычно вызывают метод state базового класса фабрики Laravel. Метод state принимает замыкание, которое получит массив изначально определенных для фабрики атрибутов, и должен вернуть массив изменяемых атрибутов:
Хуки фабрик
Хуки фабрик регистрируются с использованием методов afterMaking и afterCreating и позволяют выполнять дополнительные задачи после инициализации или создания модели. Вы должны зарегистрировать эти хуки, переопределив метод configure в вашем классе фабрики. Этот метод будет автоматически вызываться Laravel при создании экземпляра фабрики:
Создание моделей с использованием фабрик
Инициализация экземпляров моделей
Вы можете создать коллекцию из множества моделей, используя метод count :
Применение состояний
Вы также можете применить к моделям любое из ваших состояний. Если вы хотите применить к моделям несколько изменений состояния, то вы можете просто вызвать методы преобразования состояния напрямую:
Переопределение атрибутов
В качестве альтернативы, метод state может быть вызван непосредственно на экземпляре фабрики для выполнения быстрого преобразования состояния:
Защита от массового присвоения автоматически отключается при создании моделей с использованием фабрик.
Сохранение моделей
Метод create инициализирует экземпляры модели и сохраняет их в базе данных с помощью метода save модели Eloquent:
Вы можете переопределить атрибуты модели по умолчанию, передав массив атрибутов методу create :
Последовательность состояний
По желанию можно изменить значение конкретного атрибута модели для каждой вновь созданной модели. Вы можете добиться этого, определив преобразование состояния как последовательность. Например, вы можете изменять значение столбца admin между Y и N для каждого вновь созданного пользователя:
При необходимости вы можете внедрить замыкание в качестве значения последовательности. Замыкание будет вызываться каждый раз, когда последовательности потребуется новое значение:
Отношения
Отношения Has Many
Конечно, вы можете выполнять манипуляции с состоянием связанных моделей. Кроме того, вы можете передать преобразование состояния на основе замыкания, если для изменения вашего состояния требуется доступ к родительской модели:
Использование магических методов Has Many
Для удобства вы можете использовать магические методы отношений фабрики Laravel для построения отношений. Например, в следующем примере будет использоваться соглашение, чтобы определить, что связанные модели должны быть созданы с помощью метода отношений posts модели User :
При использовании магических методов для создания отношений фабрики вы можете передать массив атрибутов для их переопределения в связанных моделях:
Вы можете предоставить преобразование состояния на основе замыкания, если для изменения состояния требуется доступ к родительской модели:
Отношения Belongs To
Если у вас уже есть экземпляр родительской модели, который должен быть связан с создаваемыми вами моделями, вы можете передать экземпляр модели методу for :
Использование магических методов Belongs To
Для удобства вы можете использовать магические методы отношений фабрики Laravel для построения отношений Belongs To. Например, в следующем примере будет использоваться соглашение, чтобы определить, что три поста должны принадлежать отношениям user в модели Post :
Отношения Many To Many
Как и отношения Has Many, отношения Many To Many могут быть созданы с использованием метода has :
Атрибуты сводной таблицы
Вы можете предоставить преобразование состояния на основе замыкания, если для изменения состояния требуется доступ к связанной модели:
Использование магических методов Many To Many
Для удобства вы можете использовать магические методы отношений фабрики Laravel для построения отношений Many To Many. Например, в следующем примере будет использоваться соглашение, чтобы определить, что связанные модели должны быть созданы с помощью метода отношений roles модели User :
Полиморфные отношения
Полиморфные отношения также могут быть созданы с использованием фабрик. Полиморфные отношения Morph Many создаются так же, как типичные отношения Has Many. Например, если модель App\Models\Post имеет отношение morphMany с моделью App\Models\Comment :
Отношения Morph To
Полиморфные отношения Many To Many
Полиморфные отношения Many To Many ( morphToMany / morphedByMany ) могут быть созданы точно так же, как не полиморфные отношения Many To Many:
Конечно, магический метод has также используется для создания полиморфных отношений Many To Many:
Определение отношений внутри фабрик
Если столбцы отношения зависят от фабрики, которая его определяет, вы можете назначить замыкание атрибуту. Замыкание получит массив проанализированных атрибутов фабрики:
Запуск наполнителей (seed, seeders)
Доступные утверждения
Laravel содержит несколько утверждений базы данных для ваших функциональных тестов PHPUnit. Мы обсудим каждое из этих утверждений ниже.
assertDatabaseCount
Утверждает, что таблица в базе данных содержит указанное количество записей:
assertDatabaseHas
Утверждает, что таблица в базе данных содержит записи, соответствующие переданным ключ / значение ограничениям запроса:
assertDatabaseMissing
Утверждает, что таблица в базе данных не содержит записей, соответствующих переданным ключ / значение ограничениям запроса:
assertDeleted
Утверждает, что переданная модель Eloquent была удалена из базы данных:
Метод assertSoftDeleted используется для утверждения того, что переданная модель Eloquent была «программно удалена»:
assertModelExists
Утверждает, что данная модель существует в базе данных:
assertModelMissing
Утверждает, что данной модели не существует в базе данных: