【问题标题】:Laravel 5.3 Seeder - undefined method table?Laravel 5.3 Seeder - 未定义的方法表?
【发布时间】:2017-02-06 18:56:15
【问题描述】:

我正在尝试学习 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 box,所以 php 版本或 composer 不是问题。我也使用 MySQL 作为我的数据库驱动程序。

【问题讨论】:

  • 尝试:php artisan make:seeder --class=ProjectsTableSeeder
  • 也许是use DB; ?您是否更改了 DatabaseSeeder.php 文件?
  • \DB前面加一个反斜杠。
  • CreateProjectsAndTasksTable 中的语法有问题
  • CreateProjectsAndTasksTables 中的语法没有任何问题,它可以很好地迁移和回滚,完全没有错误。此外,我使用了 Laravel 生成的样板文件,并按照手册在表中添加了额外的字段。

标签: php mysql laravel laravel-5 laravel-seeding


【解决方案1】:

编写完播种器类后,您可以使用 db:seed Artisan 命令为您的数据库播种。默认情况下,db:seed 命令运行 DatabaseSeeder 类,该类可用于调用其他种子类。但是,您可以使用 --class 选项指定要单独运行的特定播种器类:

php artisan db:seed

php artisan db:seed --class=UsersTableSeeder

你也可以提供一个种子类引用来调用DatabaseSeeder.php文件的方法

php artisan db:seed

将运行 DatabaseSeeder.php 文件并调用 run() 方法

所以在这里你可以提供种子源列表,如关注

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

参考:seeding

【讨论】:

  • 这不应该是一个答案
【解决方案2】:

默认情况下,--seed 选项在传递给migrate:refresh 命令时会运行

{YOUR_APP}/database/seeds/DatabaseSeeder.php

make:migration artisan 命令将创建您的种子,但不会将播种器添加到 DatabaseSeeder.php 文件中。您需要手动执行此操作。

但是,如果您想使用 migrate:refresh 指定特定播种器,请使用 --seeder=YourSeeder 选项。

【讨论】:

    【解决方案3】:

    将以下内容添加到播种器类的顶部:

    use Illuminate\Support\Facades\DB;
    

    不知何故,DB不在范围内。

    【讨论】:

      【解决方案4】:

      我得到了完全相同的错误。这显然是由错字引起的。尝试将所有数据种子表与其他表进行比较。你可能放了 \DB::class 而不是 \DB::table。

      【讨论】:

        猜你喜欢
        • 2017-02-14
        • 2014-06-24
        • 1970-01-01
        • 2023-04-01
        • 2018-11-09
        • 2017-11-23
        • 1970-01-01
        • 2017-04-12
        • 1970-01-01
        相关资源
        最近更新 更多