Эта статья была впервые опубликована на https://jaychen.cc
Джей Чен
Это базовое руководство по сравнению с документацией Laravel.перенос данныха такжезаполнение данных.
migration
Доступно в Ларавелемиграция базы данныхСпособ управления базой данных, представьте себе сценарий: в проекте разработки с несколькими людьми ваши коллеги изменяют определенную структуру базы данных и модифицируют код, через git вы можете мгновенно синхронизировать модифицированный коллегами код, но структура базы данных, которую вы Оператор SQL, измененный коллегами, может быть скопирован и выполнен только вручную для обеспечения согласованности структуры базы данных. Затем концепция миграции базы данных в Laravel — это решение для обеспечения согласованности структуры базы данных в команде.
Миграция очень проста в использовании, напишите определенный php-код и выполните его, тогда Laravel автоматически обновит базу данных. Предположим, ваш коллега хочет модифицировать какое-то поле в базе данных, тогда вам нужно только написать php-код, затем вы обновляете код через git, и после выполнения операции миграции ваша структура базы данных будет синхронизирована с его. Давайте посмотрим, как его использовать.
migrate
Laravel относится к написанию php-кода для изменений базы данных какмигрировать, в состоянии пройтиphp artisan make:migration filename
способ создания файлов миграции. Предположим, вам нужно создать новую пользовательскую таблицу, тогда вы можете сделатьphp artisan make:migration create_user_table --create=user
чтобы создать файл миграции, выполните команду вdatabase/migrations/
создать каталог文件创建时间_filename
php, то этот файл мы будем использовать для записи изменений структуры базы данных. Здесь следует упомянуть одну вещь, хотя имя создаваемого файла миграции может быть произвольным, но для удобства управления лучше всего, чтобы имя файла могло отражать выполняемую операцию с базой данных.Например, здесь мы хотим создать пользовательская таблица, поэтому имя файлаcreate_user_table
.
php artisan make:migration filename
Есть два необязательных параметра
-
--create=tablename
Указывает, что миграция использовалась для создания таблицы. -
--table=tablename
Указывает, что миграция используется для работы с таблицей имя_таблицы.
Созданный нами файл миграцииcreate_user_table
Будет два метода.
public function up()
{
Schema::create('user', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('user');
}
Эти два метода являются взаимными операциями, например, мы можемup
метод для записи соответствующей информации пользовательской таблицы, которую мы хотим создать, иdown
Метод заключается в удалении операции пользовательской таблицы. Таким образом, мы можем выполнить операцию отката.Когда мы создаем пользовательскую таблицу и обнаруживаем, что имя поля неверно, мы можем передатьdown
чтобы удалить пользовательскую таблицу, а затем заново создать пользовательскую таблицу.
Предположим, что пользовательская таблица имеетid,username,email
Три поля, затем вы можете написать в методе up
public function up()
{
Schema::create('user', function (Blueprint $table) {
$table->increments('id')->index()->comment('用户id');
$table->string('name')->default('')->comment('用户名');
$table->string('email')->nullable()->comment('用户邮箱');
$table->timestamps();
});
}
В общем случае наша логика будет написана в функции замыкания. Приведенный выше код, даже если вы не можете полностью его понять, вы можете примерно догадаться о следующих моментах:
- Таблица, с которой мы работаем, является таблицей пользователей.
- Поле id определено в пользовательской таблице, поскольку вызов
increments
метод, поэтому идентификаторauto_increment
, называетсяindex
Описание метода добавляет индекс к идентификатору, и, наконец,comment
Эквивалент комментариев. - Имея опыт работы с id, поле имени также хорошо понимается,
string
имя описания методаvarchar/char
Тип,default
Определяет значение по умолчанию для поля имени. - поле электронной почты называется
nullable
Метод Описание Выполнить Поле электронной почты пусто. - При определении структуры поля вы можете использовать метод цепного вызова.
Метод в Laravel заключается в том, чтобы удовлетворить все ваши операции с оператором sql.Если вам нужно определить поле типа текста, вы можете вызватьtext()
метод, больше описаний методов можно найти в документацииКонструктор структуры базы данных Laravel.
Мы написали структуру пользовательской таблицы, а затем выполняемphp artisan migrate
, Laravel будетcreate
Метод автоматически создает для нас пользовательскую таблицу. До сих пор мы успешно создавали таблицы с помощью функции переноса Larvel.
Rollback
Использование функции миграции Laravel может стать причиной сожаления.
воплощать в жизньphp artisan migrate
После создания пользовательской таблицы вы чувствуете, что не можете этого сделать, вы не хотите использовать пользовательскую таблицу, поэтому планируете удалить эту таблицу. Итак, на этот раз мы будем использовать то, что мы только что сказалиdown
метод.
public function down()
{
Schema::dropIfExists('user');
}
Вот Лаарвел написал нам логику,dropIfExists
Функция используется для удаления таблицы, нам нужно только выполнитьphp artisan migrate :rollback
можно откатиться к исполнениюphp artisan migrate
предыдущее состояние.
переименовать таблицу
Помимо создания таблицы, вы также можете использовать любые другие операции с таблицей записей миграции, включая изменение атрибутов таблицы, изменение полей и т. д. Вот еще один пример, иллюстрирующий использование миграции для переименования таблицы.
- Предположим, есть таблица user, нам нужно переименовать ее в users. первым выполнить
php artisan make:migration rename_user_to_users --table user
для создания файла миграции. - существует
up
метод, чтобы написать логику, которую мы хотим переименовать в таблице.
public function up()
{
Schema::table('user', function (Blueprint $table) {
Schema::rename('user','users');
});
}
- Для того, чтобы откат мог быть выполнен гладко, нам также необходимо
down
Напишите логику для отмены операции переименования в методе.
public function up()
{
Schema::table('user', function (Blueprint $table) {
//
Schema::rename('users','user');
});
}
- окончательное исполнение
php artisan migrate
Затем вы можете завершить переименование пользовательской таблицы. Если вам нужно откатиться, просто сделайтеphp artisan migrate:rollback
.
Вы обнаружите, что если вы выполните миграцию, если вы выполните вторую миграцию, она не будет повторяться, потому что Laravel создаст базу данных в базе данных.migrations
таблица для записи того, какие из них были перенесены.
Базовое введение в миграцию находится здесь. Приведенный выше контент может удовлетворить большинство потребностей. Если вам нужно более подробное введение, вам может понадобиться прочитать непонятную документацию Laravel. :)
Seeder
Помимо миграции, в Laravel также есть сидер, который используется для заполнения данных. Предполагая, что при разработке проекта необходимы некоторые тестовые данные, тестовые данные также можно заполнить, написав php-код, затем с помощью кода синхронизации git у всех могут быть одинаковые тестовые данные.
Точно так же заполнение данных называется сеялкой в Laravel.Если вам нужно заполнить таблицу данными, вам нужно сначала создать сеялку. выполнивphp artisan make:seeder UserTableSeeder
для создания класса сеялки. Здесь мы хотим заполнить тестовую таблицу представления данных, поэтому имяUserTableSeeder
. Конечно, имя не обязательно, просто чтобы его знали.
После создания UserTableSeederdatabase/seeders
создать каталогUserTableSeeder
класс, этот класс имеет только один метод запуска. ты сможешьrun
метод написания кода для вставки в базу данных. Предположим, мы используем фасад БД для вставки данных в тестовую таблицу.
class UserTableSeeder extends Seeder
{
public function run()
{
DB::table('users')->insert($insertData);
}
}
После написания кода выполнитеphp artsian db:seeder --class= UserTableSeeder
для заполнения данных. После завершения выполнения убедитесь, что в базе данных уже есть данные.
Если у нас есть несколько таблиц для заполнения данными, невозможно выполнить одну за другой после написания php-кода.php artisan db:seeder --class=xxxx
заполнить. Есть простой способ. существуетDatabaseSeeder
изrun
добавить строку в метод$this->call(UserTableSeeder::class);
, затем выполнитеphp artisan db:seeder
, тогда Laravel выполнитDatabaseSeeder
серединаrun
метод, а затем выполните миграции одну за другой.
В отличие от миграции, если выполняется несколько разphp artisan db:seeder
Заполнение данных будет выполняться многократно.
Если вы хотите вставить большое количество тестовых данных за один раз, то вrun
Использование фасада БД для вставки одного за другим в метод, очевидно, не является хорошим подходом. Laravel предоставляетфабрика моделейспособ создания большого количества данных.
фабрика моделей
Фабрика моделей означает, что сущность на самом деле является фабричным шаблоном. Итак, есть две вещи, которые вам нужно сделать, чтобы создать данные с помощью фабрики моделей.
- Создайте фабрику и определите данные, которые должны быть возвращены фабрикой.
- Позвоните на завод, чтобы получить данные.
В Laravel, выполнивphp artisan make:factory UserFactory --model=User
Чтобы создать фабричный класс для пользовательской модели, этот файл будет помещен вdatabase/factory
Под содержанием. Откройте файл, и вы увидите следующий код:
$factory->define(App\User::class, function (Faker $faker) {
return [
//
];
});
Здесь значение возврата — это данные, полученные при вызове фабрики на шаге 2. Логику генерации данных тоже нужно только прописать в функции замыкания. Здесь необходимо упомянуть класс Faker. Это сторонняя библиотека, Laravel интегрирует еесторонняя библиотека. То, что делает эта библиотека, забавно: ** для генерации поддельных данных. **Предполагая, что 100 пользователей должны быть вставлены в таблицу User, тогда необходимо 100 имен пользователей, тогда вам не нужно писать логику для генерации большого количества test01, test02 таких наивных поддельных данных, использование класса Faker напрямую будет генерировать много реалистичных данных для вашего имени пользователя. (Не знаю, скучно это или нет :). . . ).
Теперь предположим, что в таблице User есть три поля: идентификатор, электронная почта, имя пользователя, затем я хочу сгенерировать 100 пользователей, сначала внедрив логику в фабричном классе.
$factory->define(App\Models\User::class, function (Faker $faker) {
return [
// 直接调用 faker API 生成假数据,更多 faker 相关查看 文档。
'username' => $faker->name,
'email' => $faker->unique()->safeEmail,
];
});
Теперь, когда мы определили фабрику, мы собираемсяUserSeeder@run
Фабрика моделей используется в функции для генерации тестовых данных.
class UserTableSeeder extends Seeder
{
public function run()
{
factory(App\User::class)->times(10)->make()->each(function($user,$index){
$user->save();
});
}
}
run
Эта волна цепных вызовов в функции тоже была черной полосой, когда я впервые начал связываться с Laravel, но после того, как я к ней привык, я почувствовал, что код действительно очень читабелен.
-
factory(App\User::class)
Указать какой завод вернуть, параметрApp\User::class
Это уникальный идентификатор завода. Здесь мы определяем фабрикуdefine
Первый параметр уже указан. -
->times(10)
Указывает, что для создания 10 пользовательских данных требуется заводской шаблон. будет вызван 10 разdefine
Второй параметр функции. -
->make()
Инкапсулируйте сгенерированные 10 пользовательских данных в объект коллекции в Laravel. -
->each()
это функция в коллекции Laravel,each
Функция работает с каждым элементом коллекции. Здесь данные напрямую сохраняются в базе данных.
Вот и все основные операции переноса и заполнения данных. Более сложное использование. . . . Не обязательно пригодный для использования.