Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 12.07.2014 18:11:24

ник

Новое приложение для старой базы данных

Всем привет.
У нас есть база данных, которая служит мультиадминкой к пачке сайтов. У нас все не доходили руки сделать к ней фронт, и вот время настало. Laravel для меня относительно неизвестный фв, но мне интересно реализовать на нем. Читая статьи везде описываются миграции в стадии "создание таблицы через artisan". Но, как быть, если таблицы есть, уже с данными, и нам не нужно создавать их и при этом мы бы хотели использовать механизм миграций в будущем, т.е. как его сейчас прицепить на основе существующих данных?

Спасибо

#2 12.07.2014 19:01:44

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: Новое приложение для старой базы данных

Миграции нужны при разработке, когда структура базы данных может часто меняется. Я не вижу смысла в применении миграций для готовой базы, просто напишите к ней фронт.

Не в сети

#3 12.07.2014 19:56:58

Ник

Re: Новое приложение для старой базы данных

Я понимаю, но смысл в том, что она может меняться, т.е. то что она не конечна - это факт.

#4 12.07.2014 21:30:13

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: Новое приложение для старой базы данных

Тогда воссоздайте структуру, данные экспортируйте в csv/xml/что_вам_удобно и заполняйте сидированием. Можно и без экспорта, просто укажите источник данных. Пример для понимания: допустим у вас есть в бд таблица с пользователями, и вы хотите их перенести на новую базу, структура которой не утверждена окончательно. Вы создаете пустую базу и миграцию:

PHP
php artisan migrate:make create_user_table

В созданной миграции описываете структуру

PHP
<?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
<?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:

PHP
class DatabaseSeeder extends Seeder {

  public function 
run()
  {
    
Eloquent::unguard();

    
$this->command->info('Создаю пользователей');
    
$this->call('UsersTableSeeder');
    
$this->command->info('Ок');

  }

}

И запустить миграцию с сидированием:

PHP
php artisan migrate
php artisan db
:seed

Изменено Cheshirrski (12.07.2014 21:36:22)

Не в сети

#5 13.07.2014 04:54:26

Ник

Re: Новое приложение для старой базы данных

Спасибо.

Подвал раздела