Laravel fluent insert with multiple values 只插入第一个值

Laravel fluent insert with multiple values only inserts the first value

我正在尝试 运行 单个播种机 class:

<?php

use Illuminate\Database\Seeder;

class CourseTableSeeder extends Seeder {

    public function run()
    {
        DB::table('courses')->insert(
            ['name' => 'PhD'],
            ['name' => 'Master'],
            ['name' => 'Bachelor'],
            ['name' => 'Foundation'],
            ['name' => 'ESL']
        );
    }

}

我执行命令:

art db:seed --class CourseTableSeeder

我希望在数据库中看到五个值,但是,我只看到第一个 'phd'。

我已经尝试通过 运行ning ->toSql() 对插入进行调试,但我认为这是不可能的,我收到以下错误,因为插入很可能是 returns 布尔值, 所以不可链接

[2018-07-23 15:35:45] local.ERROR: Call to a member function toSql() on boolean {"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Call to a member function toSql() on boolean at C:\laragon\www\

eports\database\seeds\CourseTableSeeder.php:15)

由于我无法通过深入研究框架的源代码轻松弄清楚插入方法是如何工作的,所以我开始怀疑 DB::table('table_name')->insert() 是否通过数组接受了多个插入,我设法在框架的测试套件,例如:

DB::table('posts_tags')->insert([
    ['post_id' => $post->id, 'tag_id' => 200, 'flag' => ''],
    ['post_id' => $post->id, 'tag_id' => 300, 'flag' => 'exclude'],
    ['post_id' => $post->id, 'tag_id' => 400, 'flag' => ''],
]);

来源:https://github.com/laravel/framework/blob/5.6/tests/Integration/Database/EloquentBelongsToManyTest.php#L539

所以我猜我没有做错任何事。关于问题是什么以及我已经用尽了我已知的选项时如何调试问题的任何想法。此外,虽然 运行 整个过程没有错误显示在控制台或日志文件中。

谢谢!

您的 insert() 中缺少一些 [] 语法。比较你的

->insert(
  ["name" => "..."]
);

到文档

->insert([
  ["post_id" => "..."]
]);

因此,文档建议传递单个数组,其中包含一个数组用于您要插入的每条记录,而您的实现传递多个数组。