2013-06-13 12 views
20

Z dokumentacji laravel: Database Transaction. Mówi ona, że:Jak przekazać parametr do Laravel DB :: transaction()

DB::transaction(function() { 
    DB::table('users')->update(array('votes' => 1)); 
    DB::table('posts')->delete(); 
}); 

Tutaj 1 jest wyraźnie wpisany do aktualizacji użytkownikom ... próbowałem to przy użyciu zmiennej,

$id = 3; 
DB::transaction(function() { 
    DB::table('users')->where('id','=',$id)->get(); 
}); 

zgłasza błąd:

Undefined variable: id 

Próbowałem również umieścić na $ id jako parametr podobny do tego:

$id = 3; 
DB::transaction(function($id) { 
    DB::table('users')->where('id', '=', $id)->get(); 
}); 

Mimo błędu:

Object of class Illuminate\Database\MySqlConnection could not be converted to string

Czy zrobiłem coś złego? Proszę doradź. Dzięki ...

Odpowiedz

46

use słowo kluczowe jest to, czego potrzebujesz:

$id = 3; 
DB::transaction(function($id) use ($id) { 
    DB::table('users')->where('id', '=', $id)->get(); 
}); 
+7

Zalecany wykład: [Funkcje anonimowe: Zamknięcia i Scoping] (http://www.php.net/manual/en/functions.anonymous.php) –

+0

Jeśli zmienisz $ id wewnątrz zamknięcia, wpłynie to na $ id na zewnątrz? –

+2

@CaptainHypertext Niekoniecznie, jeśli chcesz zmienić zewnętrzny identyfikator $ id, możesz po prostu odwołać się do niego w następujący sposób: 'DB :: transaction (function ($ id) use (& $ id) {' –

1

Aby odpowiedzieć @CaptainHypertext pytanie

If you alter $id inside the closure, will it affect the $id outside?

Metoda ta pracował dla mnie:

$id = 3; 
$transactionResult = DB::transaction(function($id) use ($id) { 
$request_id = DB::table('requests')->insertGetId([ 
          'company_id' => $company->$id, 
         ]); 
return $request_id ; 
}); 

echo($transactionResult); 
0

W PHP 7 zmieniła się składnia:

$id = 3; 
DB::transaction(function() use ($id) { 
    DB::table('users')->where('id', '=', $id)->get(); 
});