簡體   English   中英

Laravel 硬編碼表的播種機

[英]Laravel seeder for table that is hardcoded

我的數據庫中有幾個表,僅供我的應用程序參考。

例如,一個表有兩列 State 和 State 縮寫,並將所有 50 個州及其縮寫作為行。

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

我想為 Laravel 中的這些表編寫播種機,因為我希望在啟動新版本的應用程序時這些表存在。

存儲這些數據和創建這些播種機的最佳方式是什么?

播種器不僅僅用於測試數據,而且還非常適合靜態數據。

只需手動創建播種器就不會花太長時間,但是無需重建輪子,您可以使用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']);
    }

}

我會使用原始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)...;

Cities.php(模型)

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Cities extends Model
{
    use HasFactory;

    protected $fillable = [ 'name', 'code' ];
}

城市工廠.php

<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;

class СitiesFactory extends Factory {
    public function definition() {
        return [ 'name' => 'some string', 'code' => 'any string' ];
    }
}

CitiesSeeder.php

    <?php
    namespace Database\Seeders;
    use Illuminate\Database\Console\Seeds\WithoutModelEvents;
    use Illuminate\Database\Seeder;
    use App\Models\Cities;
    
    class CitiesSeeder extends Seeder
    {
        public function run() {
            // count(N) == Sequence array
            Cities::factory()->count(2)->state(
                 new Sequence(
                     ['name' => 'New York', 'code' => 'NY' ],
                     ['name' => 'Kyiv', 'code' => 'KY' ],
                 ))->create();
        }
    }

運行播種機 $ php artisan db:seed --class=CitiesSeeder


(偽代碼)或者改用:->state(new Seq...)

    ->sequence(fn ($it) => 
      ['name' => $sitiesNameArr[$it->index], 
      ['code' => $sitiesCodeArr[$it->index]
   ])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM