Подтвердить что ты не робот

Как передать параметр в 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 не может быть преобразован в строку

Я сделал что-то не так? Пожалуйста, порекомендуйте. Спасибо...

4b9b3361

Ответ 1

Ключевое слово use - это то, что вам нужно:

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

Ответ 2

Чтобы ответить на вопрос @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);