Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет.
У нас есть база данных, которая служит мультиадминкой к пачке сайтов. У нас все не доходили руки сделать к ней фронт, и вот время настало. Laravel для меня относительно неизвестный фв, но мне интересно реализовать на нем. Читая статьи везде описываются миграции в стадии "создание таблицы через artisan". Но, как быть, если таблицы есть, уже с данными, и нам не нужно создавать их и при этом мы бы хотели использовать механизм миграций в будущем, т.е. как его сейчас прицепить на основе существующих данных?
Спасибо
Миграции нужны при разработке, когда структура базы данных может часто меняется. Я не вижу смысла в применении миграций для готовой базы, просто напишите к ней фронт.
Не в сети
Я понимаю, но смысл в том, что она может меняться, т.е. то что она не конечна - это факт.
Тогда воссоздайте структуру, данные экспортируйте в csv/xml/что_вам_удобно и заполняйте сидированием. Можно и без экспорта, просто укажите источник данных. Пример для понимания: допустим у вас есть в бд таблица с пользователями, и вы хотите их перенести на новую базу, структура которой не утверждена окончательно. Вы создаете пустую базу и миграцию:
php artisan migrate:make create_user_table
В созданной миграции описываете структуру
<?php
//app/database/migrations/timestamp_create_users_table.php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
public function up()
{
Schema::create('users', function($table)
{
$table->increments('id');
$table->char('password', 64);
$table->char('email', 32)
->index()
->unique();
$table->char('name', 32);
$table->timestamps();
});
}
public function down()
{
Schema::drop('users');
}
}
<?php
//app/database/seeds/UsersTableSeeder.php
class UsersTableSeeder extends DatabaseSeeder {
public function run()
{
DB::table('users')->truncate();
// Получаем пользователей из старой таблицы, connection-name - имя соединения к старой базе, модель User должна быть с ней совместима
$oldUsers = Users::on('connection-name')->all();
// для ускорения процесса лучше все обернуть в транзакцию
DB::beginTransaction();
foreach ($oldUsers as $oldUser)
{
$user = array(
'password' => $oldUser->password,
'email' => $oldUser->email,
'name' => $oldUser->name,
);
DB::table('users')->insert($user);
}
DB::commit();
}
}
Осталось прописать сида в /app/database/seeds/DatabaseSeeder.php:
class DatabaseSeeder extends Seeder {
public function run()
{
Eloquent::unguard();
$this->command->info('Создаю пользователей');
$this->call('UsersTableSeeder');
$this->command->info('Ок');
}
}
И запустить миграцию с сидированием:
php artisan migrate
php artisan db:seed
Изменено Cheshirrski (12.07.2014 21:36:22)
Не в сети
Спасибо.
Страницы 1