2016-07-05 4 views
1

У меня есть несколько таблиц в моей базе данных, которые просто используются для справки в моем приложении.Сеялка Laravel для жесткого кодирования таблицы

Например, таблица с двумя столбцами, аббревиатурой состояний и состояний и имеет все 50 состояний и их сокращения как строки.

State  | State Abbreviation 
Alabama  | AL 
Alaska  | AK 
... 

Я хочу написать сеялки для этих таблиц в Laravel, так как я хочу, чтобы эти таблицы существовать, когда я начинаю новую версию приложения.

Каков наилучший способ хранения этих данных и создания этих сеялок?

+0

Вы пробовали 'дб: seed' ? https://laravel.com/docs/5.2/seeding – aynber

+0

Да, но я хочу найти лучший способ засеять жестко закодированные данные, а не поддельные данные (для чего наиболее часто используются сеялки) – carte

+0

Я всегда использовал сеялки для статических данных или помещать их непосредственно в миграцию в виде массива, а затем после 'Schema :: create' использовать' DB :: table ('table') -> insert ($ data); '. – aynber

ответ

2

сеялки больше, чем просто данные испытаний - и они идеально подходят для статических данных.

Это не займет слишком много времени, чтобы просто создать вручную сеялка, но вместо того, чтобы восстанавливать колесо, вы можете использовать эту любезность из ggoforth: https://github.com/ggoforth/laravel-5-us-states-seeder/blob/master/StatesSeeder.php

<?php 

use App\State; 
use Illuminate\Database\Seeder; 
use Illuminate\Support\Facades\DB; 

class StatesSeeder extends Seeder { 

    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 

     DB::table('states')->truncate(); 

     State::create(['name' => 'Alaska', 'code' => 'AK']); 
     State::create(['name' => 'Alabama', 'code' => 'AL']); 
     State::create(['name' => 'American Samoa', 'code' => 'AS']); 
     State::create(['name' => 'Arizona', 'code' => 'AZ']); 
     State::create(['name' => 'Arkansas', 'code' => 'AR']); 
     State::create(['name' => 'California', 'code' => 'CA']); 
     State::create(['name' => 'Colorado', 'code' => 'CO']); 
     State::create(['name' => 'Connecticut', 'code' => 'CT']); 
     State::create(['name' => 'Delaware', 'code' => 'DE']); 
     State::create(['name' => 'District of Columbia', 'code' => 'DC']); 
     State::create(['name' => 'Federated States of Micronesia', 'code' => 'FM']); 
     State::create(['name' => 'Florida', 'code' => 'FL']); 
     State::create(['name' => 'Georgia', 'code' => 'GA']); 
     State::create(['name' => 'Guam', 'code' => 'GU']); 
     State::create(['name' => 'Hawaii', 'code' => 'HI']); 
     State::create(['name' => 'Idaho', 'code' => 'ID']); 
     State::create(['name' => 'Illinois', 'code' => 'IL']); 
     State::create(['name' => 'Indiana', 'code' => 'IN']); 
     State::create(['name' => 'Iowa', 'code' => 'IA']); 
     State::create(['name' => 'Kansas', 'code' => 'KS']); 
     State::create(['name' => 'Kentucky', 'code' => 'KY']); 
     State::create(['name' => 'Louisiana', 'code' => 'LA']); 
     State::create(['name' => 'Maine', 'code' => 'ME']); 
     State::create(['name' => 'Marshall Islands', 'code' => 'MH']); 
     State::create(['name' => 'Maryland', 'code' => 'MD']); 
     State::create(['name' => 'Massachusetts', 'code' => 'MA']); 
     State::create(['name' => 'Michigan', 'code' => 'MI']); 
     State::create(['name' => 'Minnesota', 'code' => 'MN']); 
     State::create(['name' => 'Mississippi', 'code' => 'MS']); 
     State::create(['name' => 'Missouri', 'code' => 'MO']); 
     State::create(['name' => 'Montana', 'code' => 'MT']); 
     State::create(['name' => 'Nebraska', 'code' => 'NE']); 
     State::create(['name' => 'Nevada', 'code' => 'NV']); 
     State::create(['name' => 'New Hampshire', 'code' => 'NH']); 
     State::create(['name' => 'New Jersey', 'code' => 'NJ']); 
     State::create(['name' => 'New Mexico', 'code' => 'NM']); 
     State::create(['name' => 'New York', 'code' => 'NY']); 
     State::create(['name' => 'North Carolina', 'code' => 'NC']); 
     State::create(['name' => 'North Dakota', 'code' => 'ND']); 
     State::create(['name' => 'Northern Mariana Islands', 'code' => 'MP']); 
     State::create(['name' => 'Ohio', 'code' => 'OH']); 
     State::create(['name' => 'Oklahoma', 'code' => 'OK']); 
     State::create(['name' => 'Oregon', 'code' => 'OR']); 
     State::create(['name' => 'Palau', 'code' => 'PW']); 
     State::create(['name' => 'Pennsylvania', 'code' => 'PA']); 
     State::create(['name' => 'Puerto Rico', 'code' => 'PR']); 
     State::create(['name' => 'Rhode Island', 'code' => 'RI']); 
     State::create(['name' => 'South Carolina', 'code' => 'SC']); 
     State::create(['name' => 'South Dakota', 'code' => 'SD']); 
     State::create(['name' => 'Tennessee', 'code' => 'TN']); 
     State::create(['name' => 'Texas', 'code' => 'TX']); 
     State::create(['name' => 'Utah', 'code' => 'UT']); 
     State::create(['name' => 'Vermont', 'code' => 'VT']); 
     State::create(['name' => 'Virgin Islands', 'code' => 'VI']); 
     State::create(['name' => 'Virginia', 'code' => 'VA']); 
     State::create(['name' => 'Washington', 'code' => 'WA']); 
     State::create(['name' => 'West Virginia', 'code' => 'WV']); 
     State::create(['name' => 'Wisconsin', 'code' => 'WI']); 
     State::create(['name' => 'Wyoming', 'code' => 'WY']); 
     State::create(['name' => 'Armed Forces Africa', 'code' => 'AE']); 
     State::create(['name' => 'Armed Forces Americas (except Canada)', 'code' => 'AA']); 
     State::create(['name' => 'Armed Forces Canada', 'code' => 'AE']); 
     State::create(['name' => 'Armed Forces Europe', 'code' => 'AE']); 
     State::create(['name' => 'Armed Forces Middle East', 'code' => 'AE']); 
     State::create(['name' => 'Armed Forces Pacific', 'code' => 'AP']); 
    } 

} 
+1

Было бы еще лучше простой массив с состояниями, а затем 'State :: insert ($ states)'. – user2094178

1

Я хотел бы использовать сырой SQL:

class DatabaseSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function seed($table) 
    { 
     $this->command->info('Seeding '.$table); 
     $this->call($table.'TableSeeder'); 
    } 

    public function run() 
    { 
     DB::unprepared(file_get_contents(database_path('states.sql'))); 
    } 
} 

, а затем в SQL файл:

INSERT INTO `states` (`id`, `state`, `abbrev`) 
VALUES 
    (1,'Alabama', 'AL'), 
    (2,'Alaska', 'AK)...; 
+0

Я хочу использовать интерфейс сеялок Laravel. Есть ли способ сделать все еще используя raw sql? – carte

+0

Это входит в интерфейс сеялок –

+0

Где я могу хранить state.sql – carte

Смежные вопросы