2015-06-25 54 views
5

我正在使用Laravel 5 LAMP堆棧,並且正在嘗試使用數據庫事務處理CSV導入。代碼如下所示:Laravel - 從數據庫事務關閉中獲取變量

// Should contain any messages to pass back to the user 
$results = []; 

// Contains the total records inserted 
$total = 0; 

DB::transaction(function() use($csv_file, $results, $total) { 

    // Some Code ... 

    $total++; 
    $results[] = 'Row 10 has some weird data...'; 
}); 

return view('plan.import') 
    ->with('results', $results) 
    ->with('total', $total); 

在那年底,我的記錄是進口的,但我總$ $和結果仍然是空的,因爲它們是封閉的範圍之內。我知道他們在功能裏面被改變了,因爲我已經通過了它,並且看到它們發生了變化。我只是無法確定如何讓他們離開該交易並將其交還給用戶。任何人都可以請幫忙嗎?

回答

15

您可以替換以下行:

DB::transaction(function() use($csv_file, $results, $total) 

與此:

DB::transaction(function() use($csv_file, &$results, &$total) 

所以在函數內部提出將在變量反映,因爲&創建了變量的參考變化(通行證變量引用)而不是按值傳遞它們。檢查Passing by Reference手冊。

或者,您可以從封閉內像返回變量:

$array = DB::transaction(function() use($csv_file, $results, $total) { 

    // Some Code ... 

    $total++; 
    $results[] = 'Row 10 has some weird data...'; 
    return compact('total', 'results'); 
}); 

然後使用它像:

return view('plan.import') 
->with('results', $array['results']) 
->with('total', $array['total']); 
+1

這真棒。我甚至都不知道,但現在效果很好,謝謝! –

+1

感謝您通過參考傳遞的正確示例 – Shay

+0

不客氣@Shay :-) –