web-dev-qa-db-ja.com

Laravel DB :: transaction()にパラメータを渡す方法

laravelドキュメント: データベーストランザクション から。

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

ここでは、ユーザーを更新するために1が明示的に入力されています...変数を使用してこれを試しましたが、

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

エラーをスローします:

Undefined variable: id

私はまた、次のようなパラメーターとして$ idに配置しようとしました:

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

それでも、エラー:

クラスIlluminate\Database\MySqlConnectionのオブジェクトを文字列に変換できませんでした

私は何か間違ったことをしましたか?お知らせ下さい。ありがとう...

28
Melvin

useキーワードが必要です。

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

PHP 7では、構文が変更されています:

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

@CaptainHypertextの質問に答えるには

クロージャーの内側の$ idを変更すると、外側の$ idに影響しますか?

この方法は私にとってうまくいきました:

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

echo($transactionResult);
1
LeRoy