首页 > 解决方案 > SQLSTATE [42S22]:找不到列:1054 '字段列表'中的未知列'0' - Laravel Eloquent

问题描述

当我尝试使用 laravel 5.5.41 在数据库中保存对象时出现此错误

这是我的代码

$game = new Game;
$game->name = $itemFetched["name"];
$game->image = $itemFetched["image"];
$game->wikipediaPageUrl = $itemFetched["wikipediaPageUrl"];
$game->wikipediaPageName = $itemFetched["wikipediaPageName"];
$game->wikipediaPageSlug = $itemFetched["wikipediaPageSlug"][0;
$game->save();
$gameid = $game->id;

这是我得到的错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list'
(SQL:

insert into `games`
(`0`, `1`, `2`, `3`, `4`, `5`, `name`, `image`, `wikipediaPageUrl`, `wikipediaPageName`, `wikipediaPageSlug`,
`updated_at`, `created_at`) values
(name, image, metadata, wikipediaPageUrl, wikipediaPageName, wikipediaPageSlug,
    TestName, https://testimageurlvalue.png,
    https://testPageUrlValue.it, testPageNameValue, testPageSlugValue,
2018-08-08 17:08:42,
2018-08-08 17:08:42))

我已经尝试过这样的:

$gameToImport = array(
    'name' => $itemFetched["name"],
    'image' => $itemFetched["image"],
    'metadata' => json_encode($itemFetched["metadata"]),
    'wikipediaPageUrl' => $itemFetched["wikipediaPageUrl"],
    'wikipediaPageID' => $itemFetched["wikipediaPageID"],
    'wikipediaPageName' => $itemFetched["wikipediaPageName"],
    'wikipediaPageSlug' => $itemFetched["wikipediaPageSlug"]
);

$game = new Game($gameToImport);
$game->save();

并将 save() 切换为 create() 结果几乎相同,我发现插入记录的唯一方法是使用 insert 方法,但我无法获取新记录的 id,甚至 $game- >id 为空.. 我也尝试将 ->id() 或 ->id 附加到插入调用但没有成功..

请有人可以帮助我理解什么是错的?

标签: phplaraveleloquent

解决方案


我强烈建议使用 create 方法,但如果您已经使用过 insert 并工作过,您可以尝试:

$game_id = DB::table('games')->insertGetId($itemFetched);

或者

$game_id = DB::table('games')->insertGetId(['name'=>$itemFetched["name"],
'image' => $itemFetched["image"]]);

在此处查看更多信息https://laravel.com/docs/5.6/queries#inserts


推荐阅读