簡體   English   中英

Laravel數據庫播種器,設置特定值laravel 5

[英]Laravel database seeder, setting specific values laravel 5

我正在嘗試填充數據庫,並有一個父status表和一個子server_statuses表。 這是一對多的關系。

我遇到的問題是,狀態表只有3個值,需要將它們設置為特定值( success, warning, danger )。 Larvaels文檔對如何完成此工作沒有深入探討。

我還不確定播種是否是收到錯誤的原因,發布如下。 如果不是種子,我想我可以在PHPmyAdmin中手動輸入3個值,然后運行數據庫種子。 我還將發布遷移文件和種子文件。

對解決此錯誤有任何想法嗎?

運行播種機時的當前錯誤:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constrai
ENCES `statuses` (`id`)) (SQL: insert into `server_statuses` (`server_id`, `status_id`, `updated_at`, `created_at`) values (20, 4, 2018-07-03 12:21:05,

遷移:

 Schema::create('statuses', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->string('key');
            $table->string('status');
            $table->timestamps();
        });

 Schema::create('server_statuses', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->integer('server_id')->unsigned();
            $table->foreign('server_id')->references('id')->on('servers')->onDelete('cascade');
            $table->integer('status_id')->unsigned();
            $table->foreign('status_id')->references('id')->on('statuses');
            $table->timestamps();
        });

播種機工廠(刪除了我正在嘗試的“狀態”,因為這是對解決方案的一次可怕嘗試):

$factory->define(Status::class, function (Faker $faker) {

    return [
        'key' => ,
        'status' => 
    ];
});

$factory->define(ServerStatus::class, function (Faker $faker) {
    return [
        'server_id' => $faker->numberBetween($min = 1, $max = 20),
        'status_id' => $faker->numberBetween($min = 1, $max = 3)
    ];
});

此錯誤是因為您要在status表中不存在的條目中插入帶有status_id server_statuses 首先輸入ID為1到3的status條目,然后運行命令在server_statuses插入數據。

根據您的最新評論。 從數組播種數據庫的方法。

創建一個播種器類:

use Illuminate\Database\Seeder;
use App\Models\Status;

class StatusSeeder extends Seeder {

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run() {
        DB::table('status')->delete();
        $statuses = [
            ['key' => 1, 'status' => '1'],
            ['key' => 2, 'status' => '2'],
        ];
        foreach ($statuses as $status) {
            Status::create(array(
                'key' => $status["key"],
                'status' => $status["status"],
            ));
        }
    }

}

並將其條目添加到默認的DatabaseSeeder.php

public function run()
    {
         $this->call(StatusSeeder::class);
    }

通過php artisan db:seed運行播種過程。 有關更多信息,請訪問此處

暫無
暫無

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

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