gpt4 book ai didi

php - Laravel4在测试环境中使用SQLite播种失败,而使用mysql成功

转载 作者:行者123 更新时间:2023-12-03 18:36:56 25 4
gpt4 key购买 nike

简而言之:种子在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


我在“连接”中拥有此配置(“默认”键为“ sqlite”)

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


现在,如果我发出


php artisan migration --seed,这个工作正常。


如果我发出


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


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


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


怎么了

最佳答案

查看第52行,我们发现:

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


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

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

像这样修复它:

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


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

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

关于php - Laravel4在测试环境中使用SQLite播种失败,而使用mysql成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19170649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com