具有多个值的Laravel流利插入仅插入第一个值

时间:2018-07-23 15:01:51

标签: php laravel laravel-5.6

我正在尝试运行一个播种器类:

<?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”。

我尝试通过在插入程序上运行->toSql()来调试此错误,但我认为这不可能,并且由于出现插入程序很可能返回布尔值(因此不可链接)而收到以下错误

[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)

由于无法通过挖掘框架的源代码轻易地弄清insert方法的工作原理,我开始怀疑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

所以我想我没有做错任何事情。关于问题的根源以及如何调试出问题的任何想法,因为我已经用尽了我所知的所有选项。此外,在运行整个过程时,控制台或日志文件中不会显示任何错误。

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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

文档

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

因此,文档建议传递一个数组,在实现中传递多个数组时,该数组包含要插入的每个记录的数组。