我正在尝试学习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流浪盒,因此php版本或作曲家不是问题。我也使用MySQL作为我的数据库驱动程序。
答案 0 :(得分: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()meothd
所以在这里你可以提供种子来源列表,如关注
public function run()
{
$this->call(CountriesTableSeeder::class);
$this->call(VendorTypesTableSeeder::class);
}
参考:seeding
答案 1 :(得分:0)
默认情况下,传递给--seed
命令时的migrate:refresh
选项将运行
{YOUR_APP}/database/seeds/DatabaseSeeder.php
make:migration
artisan命令将创建您的种子,但它不会将播种器添加到DatabaseSeeder.php文件中。您需要手动执行此操作。
但是,如果您要使用migrate:refresh
指定特定的播种机,请使用--seeder=YourSeeder
选项。
答案 2 :(得分:0)
将以下内容添加到播种机类的顶部:
use Illuminate\Support\Facades\DB;
不知何故,DB不在范围内。
答案 3 :(得分:0)
我得到了完全相同的错误。这显然是由错字引起的。尝试将所有数据种子表与其他表进行比较。您可能放了\ DB :: class而不是\ DB :: table。