0

私は Laravel を学ぼうとしていますが、ドキュメントには間違った例が書かれているようです...テーブルの移行を作成して実行し、いくつかのコンテンツをシードしたいと考えています。

初め:

php artisan make:migration create_projects_and_tasks_tables

次の内容で:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateProjectsAndTasksTables extends Migration
{
    /**
      * Run the migrations.
      *
      * @return void
      */
      public function up()
      {
          Schema::create('projects', function (Blueprint $table) {
              $table->increments('id');
              $table->string('name')->default('');
              $table->string('slug')->default('');
              $table->timestamps();
      });

      Schema::create('tasks', function (Blueprint $table) {
          $table->increments('id');
          $table->integer('project_id')->unsigned()->default(0);
          $table->foreign('project_id')->references('id')->on('projects')->onDelete('cascade');
          $table->string('name')->default('');
          $table->string('slug')->default('');
          $table->boolean('completed')->default(false);
          $table->text('description');
          $table->timestamps();
      });
  }

  /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::drop('tasks');
        Schema::drop('projects');
     }
}

正常に移行しました。だから私はプロジェクトテーブルをシードしたいと思います。

初め:

php artisan make:seeder ProjectsTableSeeder

内容:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class ProjectsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $projects = array(
            ['id' => 1, 'name' => 'Project 1', 'slug' => 'project-1', 'created_at' => new DateTime, 'updated_at' => new DateTime],
            ['id' => 2, 'name' => 'Project 2', 'slug' => 'project-2', 'created_at' => new DateTime, 'updated_at' => new DateTime],
            ['id' => 3, 'name' => 'Project 3', 'slug' => 'project-3', 'created_at' => new DateTime, 'updated_at' => new DateTime]
        );
        DB::table('projects')->insert($projects);
    }
}

すべての設定が完了したら、移行をロールバックし、移行してシードしようとしました。

php artisan migrate:refresh --seed
Rolled back: 2016_09_28_160459_create_projects_and_tasks_tables
Rolled back: 2014_10_12_100000_create_password_resets_table
Rolled back: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrated: 2016_09_28_160459_create_projects_and_tasks_tables

[Symfony\Component\Debug\Exception\FatalThrowableError]                   
  Call to undefined method Illuminate\Database\MySqlConnection::setTable()

以上です。私のテーブルは空で、メソッド DB::table() は、5.3 のドキュメントに示されていても、フレームワークにはもう存在しないようです。私に何ができる?

Laravel Homestead vagrant ボックスを使用しているため、php のバージョンやコンポーザーは問題になりません。また、MySQL をデータベース ドライバーとして使用しています。

4

4 に答える 4

1

シーダー クラスを記述したら、db:seed Artisan コマンドを使用してデータベースをシードできます。デフォルトでは、db:seed コマンドは DatabaseSeeder クラスを実行します。このクラスは、他のシード クラスを呼び出すために使用できます。ただし、 --class オプションを使用して、個別に実行する特定のシーダー クラスを指定できます。

php artisan db:seed

php artisan db:seed --class=UsersTableSeeder

また、DatabaseSeeder.php ファイルのメソッドを呼び出すためのシーダー クラス参照を提供できます。

PHP職人データベース:シード

DatabaseSeeder.php ファイルを実行し、run() メソッドを呼び出します

したがって、ここでは、次のようなシード ソースのリストを提供できます。

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

参考:播種

于 2016-09-28T17:57:42.333 に答える