2013-10-03 44 views
1

簡而言之:播種工作正常與MySQL,而與sqlite休息。斷碼就像是DB::table('user')->insert($users);Laravel4在測試環境中播種失敗使用SQLite,但成功使用mysql

種子代碼:

<?php 
public function run() { 
    DB::table('user')->delete(); 
    $users = array(); 
    $birth = new DateTime('1980-03-12'); 
    while ($i++ < 50) { 
     $users[$i]['email'] = "[email protected]"; 
     $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的,我現在想切換到源碼的測試環境。所以,在

應用程序/配置/測試/ database.php中

我有這樣的配置,裏面 '連接'( '默認' 關鍵是 '源碼')

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

現在,如果我發出

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

如果我發出

PHP工匠遷移--seed --env =測試,這是行不通的

以上DB::table('user')->insert($users);失敗,事實上當我發表評論播種工作正常。 在命令行的錯誤是

ErrorException 「 」消息「:」 array_keys()預計參數1是 陣列,空給定[...] /laravel /框架/ SRC /照亮/數據庫?/Query/Grammars/SQLiteGrammar.php","line":52

什麼是錯在這裏

回答

3

在52行上我們發現:

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

這是用來構建查詢(INSERT INTO (column1, column2) VALUES...

$values是列清單的一部分,你的情況$users,但它不具有0指數。爲什麼? while ($i++ < 50)在進入循環體之前遞增$ i,所以第一個索引$users將是1,而不是0,因爲Laravel SQLite insert實現需要。

修復這樣的:

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

爲什麼MySQL的實施工作? 這是對應的行看起來像在此實現:

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

如果有人有興趣我提交pull請求該https://github.com/laravel/framework/pull/2405 –

相關問題