php - 在 Laravel 5.6 中播种数据库时出现 Illuminate\Database\QueryException 错误
问题描述
我已经尝试解决这个问题将近 2 天了。所以,我有一个这样的播种机:
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call([
'RolesTableSeeder',
'UserTableSeeder',
'DevelopersTableSeeder',
'ESRBRatingTableSeeder',
'GameGenreTableSeeder',
'ManufacturerTableSeeder',
'PlatformsTableSeeder',
'PublishersTableSeeder',
'GamesTableSeeder',
'CommunitiesTableSeeder'
]);
}
}
但是,当我使用它运行它时,出现php artisan db:seed
以下错误:
Illuminate\Database\QueryException : SQLSTATE[22003]: Numeric value out of range: 1416 Cannot get geometry object from data you send to the GEOMETRY field (SQL: insert into `games` (`title`, `description`, `platform`, `ESRBRating`, `developer`, `publisher`, `genre`) values (Pokemon Sun, Pokemon Sun version for the Nintendo 3DS, 4, 1, 1, 1, 4))
我已经确定在 GamesTableSeeder 文件中触发了该问题,如下所示:
public function run()
{
$platform = Platform::where('name', '=', 'Nintendo 3DS')->first();
$esrb = EsrbRating::where('rating', '=', 'E')->first();
$dev = Developer::where('name', '=', 'GameFreak')->first();
$pub = Publisher::where("name", "Nintendo")->first();
$genre = GameGenre::where('genre', 'Role-Playing')->first();
DB::table('games')->insert([
'title' => 'Pokemon Sun',
'description' => "Pokemon Sun version for the Nintendo 3DS",
'release_date' => new Carbon(),
'minimum_players' => 1,
'maximum_players' => 4,
'platform' => $platform->id,
'ESRBRating' => $esrb->id,
'developer' => $dev->id,
'publisher' => $pub->id,
'genre' => $genre->id,
'created_at' => new Carbon()
]);
}
如您所见,该表有一些引用不同表的外键。我检查了其他播种机的结果,看看是否有任何一个导致错误。但是,它们似乎都有效。
我会很感激任何帮助,因为这件小事已经让我头疼了。这可能是一件非常愚蠢的事情,导致我没有注意到。
这是表的迁移。
Schema::create('games', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->unique();
$table->multilineString('description');
$table->datetime('release_date')->nullable();
$table->integer('minimum_players')->unsigned()->default(1);
$table->integer('maximum_players')->unsigned()->default(1);
$table->timestamps();
$table->softDeletes();
});
这里是添加外键的地方:
Schema::table('games', function(Blueprint $table){
$table->integer('platform')->unsigned();
$table->integer('ESRBRating')->unsigned();
$table->integer('developer')->unsigned();
$table->integer('publisher')->unsigned();
$table->integer('genre')->unsigned();
$table->foreign('platform')->references('id')->on('platforms');
$table->foreign('ESRBRating')->references('id')->on('esrb_ratings');
$table->foreign('developer')->references('id')->on('developers');
$table->foreign('publisher')->references('id')->on('publishers');
$table->foreign('genre')->references('id')->on('game_genres');
});
解决方案
我认为字段数据类型存在问题,description
即 multilineString
用于存储几何点,而不是字符串。请将描述字段更新为:
$table->text('description');
在games
表模式中。您可以为它创建一个新的迁移,如下所示:
Schema::table('games', function (Blueprint $table) {
$table->text('description')->change();
});
运行它,然后再次运行播种机。
推荐阅读
- python - 满足 PyDispatcher-2.0.5 的要求(来自版本:无)
- powershell - 简单的powershell成功或失败日志
- regex - 为什么 '['||chr(128)||'-'||chr(255)||']' 不起作用
- javascript - 将 Scrapy spider 作为脚本运行不会获得所有代码,但来自项目的 scrapy spider 会
- python - 如何在循环上制作数字生成器,并将每次重复限制为最多100个,以便生成的数字数量为100个数字
- javascript - 使用 javascript 突出显示 CSS 网格布局中的元素
- javascript - 如何将一行文本放在对象数组的新行上,以便问题更清晰?
- visual-studio-code - 是否可以在 Visual Studio Code 中添加自定义键盘快捷键?
- javascript - 我总是收到无效的挂钩呼叫,我不知道为什么
- swift - NavigationLink 文本模糊 swiftui