2013-06-13 15 views
20

Aus der Laravel-Dokumentation: Database Transaction. Er sagt, dass:Wie Parameter an Laravel übergeben werden DB :: transaction()

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

Hier 1 ist explizit die Benutzer zu aktualisieren eingetragen ... Ich habe versucht, dies über eine Variable,

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

Es wirft einen Fehler:

Undefined variable: id 

Ich habe auch versucht, $ ID als Parameter wie folgt zu setzen:

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

Noch ein Fehler:

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

Habe ich etwas falsch gemacht? Bitte beraten. Dank ...

Antwort

46

Das use Schlüsselwort ist, was Sie brauchen:

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

Empfohlene Vorlesung: [Anonymous Funktionen: Closures & Scoping] (http://www.php.net/manual/en/functions.anonymous.php) –

+0

Wenn Sie $ ID innerhalb der Schließung ändern, wird es Auswirkungen auf die $ ID draußen? –

+2

@CaptainHypertext Nicht unbedingt, wenn Sie die äußere $ id ändern möchten, können Sie einfach so darauf verweisen: 'DB :: transaction (function ($ id) use (& $ id) {' –

1

@CaptainHypertext Frage der

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

Diese Methode funktionierte für mich zu beantworten:

$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

In PHP 7 Die Syntax hat sich geändert:

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