来自多个csv文件的Laravel种子表

时间:2018-05-30 08:11:22

标签: sql database laravel-5 database-migration

我对Laravel和数据库非常陌生,我试图了解如何将数据插入到我的数据库中。请耐心等待,你的问题听起来很虚伪。

  1. STEP
  2. 我在迁移中创建了一个表。表格示例:

    public function up(){
    
            Schema::create('job-urls', function (Blueprint $table) {
                $table->increments('id');
                $table->foreign('job_id')->references('id')->on('jobs');
                $table->string('url')->index();
                $table->string('hash');
                $table->timestamp('created_at')->nullable();
                $table->timestamp('updated_at')->nullable();
    
    1. STEP
    2. 我有两个对应于字段urlhash的csv文件,我想插入它们。我在迁移中创建了一个名为populate_jobs_url

      的新文件
      class PopulateJoburls extends Migration
      {
          /**
           * Run the migrations.
           *
           * @return void
           */
          public function up(){
              $fileurls = fopen('../data/urls.csv', 'r');
              $filehash = fopen('../data/urls_hash.csv', 'r');
      
              while (($row = fgetcsv($fileurls, 0, ',')) !=FALSE){
                  DB::table('joburls')->insert(
                  array(
                      'url' => $row,
                  )
                  );
              }
              while (($row = fgetcsv($filehash, 0, ',')) !=FALSE){
                  DB::table('joburls')->insert(
                  array(
                      'hash' => $row,
                  )
                  );
                  }
          }
      

      你能帮助我理解我是如何检查桌子是否正确填充的吗?这种方法是否正确?我怎么能在我的数据库中插入数据?不幸的是,Web上的所有示例都涉及使用表单手动插入数据。

      由于

1 个答案:

答案 0 :(得分:0)

在迁移文件中播种表不是最佳做法。您可以利用Seeders,这是用测试或实际数据填充表格的正确方法。

首先,使用php artisan make:seeder PopulateJobUrls命令创建一个播种器文件。然后你可以这样安排你的播种机:

<?php

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

class PopulateJobUrls extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
     public function run()
     {
         $fileurls = fopen('../data/urls.csv', 'r');
         $filehash = fopen('../data/urls_hash.csv', 'r');

         // Rest of your seeding logic...
     }
}

您应该在run方法中引用database/seeds/DatabaseSeeder.php的播种机:

$this->call(PopulateJobUrls::class);

运行php artisan db:seed或者如果您想更具体一点,php artisan db:seed --class=PopulateJobUrls并且您最好使用正确填充的数据!