当我尝试为数据库播种时,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');
});
}
}
答案 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()
,表格将被清空,但仍然存在,因此您可以播种它。