В Laravel можно использовать методы миграций для заполнения колонок данными из других таблиц. Следующий пример показывает, как это можно сделать.
Предположим, у вас есть две таблицы: users
и countries
. Вам нужно заполнить колонку country_id
в таблице users
данными из колонки id
в таблице countries
. Вот шаги, которые нужно выполнить:
- Создайте миграцию с помощью команды artisan
php artisan make:migration update_users_table
. Это создаст файл миграции в каталогеdatabase/migrations
.
- Откройте созданный файл миграции и в методе
up
добавьте код, который заполняет колонкуcountry_id
данными из таблицыcountries
. Например:
use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class UpdateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function (Blueprint $table) { $table->foreignId('country_id')->nullable(); $table->foreign('country_id')->references('id')->on('countries'); }); $users = AppModelsUser::all(); foreach ($users as $user) { $country = AppModelsCountry::first(); $user->country_id = $country->id; $user->save(); } } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function (Blueprint $table) { $table->dropForeign('users_country_id_foreign'); $table->dropColumn('country_id'); }); } }
Обратите внимание, что вместо AppModelsUser
и AppModelsCountry
вы должны использовать свои модели для доступа к таблицам.
- Запустите миграцию с помощью команды
php artisan migrate
. Теперь в колонкеcountry_id
каждой записи в таблицеusers
будет сохранено значение из колонкиid
таблицыcountries
.
- Если вы хотите отменить эту миграцию и удалить созданную колонку, вы можете использовать команду
php artisan migrate:rollback
.
Вот и все! Теперь вы знаете, как заполнить колонку в миграции Laravel данными из другой таблицы.