Laravel播种错误 - 错误的表名

时间:2014-07-04 19:53:53

标签: php mysql laravel-4 seeding

当我尝试为数据库播种时,Laravel会抛出此错误。

我的桌子是institution_school而不是institution_schools,Laravel在错误中报告了什么。

 [Illuminate\Database\QueryException]
 SQLSTATE[42S02]: Base table or view not found: 1146 Table 'eesdatabase.inst
 itution_schools' doesn't exist (SQL: insert into `institution_schools` (`sc
 hool_id`, `instituion_id`, `energy_id`, `year`, `updated_at`, `created_at`)
  values (38, 1, 1, 2005, 2014-07-04 19:38:41, 2014-07-04 19:38:41))

我尝试删除数据库并再次迁移和播种。 我尝试使用" php artisan:cache clear"

重置Laravel缓存

有谁知道如何解决这个问题? 感谢

<?php    
class InstitutionSchool extends Eloquent {


    protected $table = "institution_school";        
    protected $guarded = array('id');

    public function school() {
        return $this -> belongsTo('School');
    }

    public function institutio() {
        return $this -> belongsTo('Institution');
    }

    public function energy() {
        return $this -> belongsTo('Energy');
    }    
}
?>

<?php
class InstitutionSchoolTableSeeder extends DatabaseSeeder {
    public function run() {
        DB::table('institution_school') -> delete();

        $faker = $this -> getFaker();
        $schools = School::all();
        $institutions = Institution::all();
        $energies = Energy::all();

        foreach ($schools as $school) {
            for ($i = 0; $i < rand(1, 5); $i++) {
                $year = $faker -> randomNumber(2000, 2015);

                InstitutionSchool::create(array(
                'school_id' => $school -> id, 
                'instituion_id' => 1,
                'energy_id' => 1, 
                'year' => $year));
            }

        }
    }

}
?>

<?php    
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateInstitutionSchoolTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('institution_school', function(Blueprint $table)
        {
            $table->increments('id');
            $table->integer('institution_id')->unsigned();
            $table->integer('school_id')->unsigned();
            $table->string('year');
            $table->string('other_source_name')->nullable();

            $table->integer('energy_id')->unsigned()->nullable();

            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('institution_school', function(Blueprint $table)
        {
            Schema::drop('institution_school');
        });
    }    
}

3 个答案:

答案 0 :(得分:5)

尝试在模型中明确定义表名。它可能会奏效。但它当然不是一个完整的解决方案,只是让它成功的黑客攻击:D

protected $table = "institution_school";

答案 1 :(得分:0)

Laravel假设您使用复数命名SQL表小写,并且模型是单数形式的PascalCase。您可能希望重命名表格以包含&#34; s&#34;。

答案 2 :(得分:0)

InstitutionSchoolTableSeeder中,您有以下内容:

DB::table('institution_school') -> delete();

应该是:

DB::table('institution_school') -> truncate();

使用->delete()表格消失了,它会抛出错误。使用->truncate(),表格将被清空,但仍然存在,因此您可以播种它。