【问题标题】:Laravel4 Seeding in testing environment fails using SQLite, while succeeds using mysqlLaravel4 在测试环境中播种使用 SQLite 失败,而使用 mysql 成功
【发布时间】:2013-10-10 19:51:58
【问题描述】:

简而言之:播种在 mysql 上运行良好,而在 sqlite 上中断。损坏的代码就像DB::table('user')->insert($users);

种子代码:

<?php
public function run() {
    DB::table('user')->delete();
    $users = array();
    $birth = new DateTime('1980-03-12');
    while ($i++ < 50) {
        $users[$i]['email'] = "mail$i@example.com";
        $users[$i]['password'] = User::password('test');
        $users[$i]['enabled'] = 1;
        $users[$i]['name'] = 'Name';
        $users[$i]['surname'] = 'Surname';
        $users[$i]['birthDate'] = $birth;
    }
    DB::table('user')->insert($users); //<- This line is broken when using sqlite.
}

我的默认数据库驱动程序是 mysql,现在我正尝试切换到 sqlite 用于测试环境。所以,在

app/config/testing/database.php

我有这个配置,在'connections'里面('default'键是'sqlite')

'sqlite' => array(
            'driver'   => 'sqlite',
            'database' => ':memory:',
            'prefix'   => '',
        ),

现在,如果我发布

php artisan migrate --seed,这工作正常。

如果我发布

php artisan migrate --seed --env=testing,这不起作用

上面的DB::table('user')-&gt;insert($users); 失败了,事实上,当我评论说播种工作正常时。 命令行的错误是

ErrorException","message":"array_keys() 期望参数 1 为 数组,给定 null [...] /laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php","line":52

这里有什么问题?

【问题讨论】:

    标签: php sqlite laravel laravel-4 seeding


    【解决方案1】:

    查看第 52 行,我们发现:

    $names = $this->columnize(array_keys($values[0]));
    

    这用于构建查询的列列表部分(INSERT INTO (column1, column2) VALUES...

    $values 在您的情况下是 $users,但它没有 0 索引。为什么? while ($i++ &lt; 50) 在进入循环体之前增加 $i,所以 $users 的第一个索引将是 1,而不是 0,因为 Laravel SQLite insert 实现需要。

    像这样修复它:

    $i = 0;
    while ($i < 49) {
        ...
        $i++;
    }
    

    为什么 MySQL 实现有效? 这是此实现中相应行的样子:

    $columns = $this->columnize(array_keys(reset($values)));
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多