【问题标题】:How to pass parameter to Laravel DB::transaction()如何将参数传递给 Laravel DB::transaction()
【发布时间】:2013-06-09 16:48:15
【问题描述】:

来自 laravel 文档:Database Transaction。 它说:

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 类的对象无法转换为字符串

我做错了吗?请指教。谢谢...

【问题讨论】:

    标签: database transactions laravel eloquent


    【解决方案1】:

    use 关键字就是您所需要的:

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

    对于 PHP 7(未经测试,按以下答案的要求进行编辑):

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

    【讨论】:

    • 如果在闭包内部修改$id,会影响外面的$id吗?
    • @CaptainHypertext 不一定,如果你想改变外面的$id,你可以像这样引用它:DB::transaction(function($id) use (&$id) {
    • @Alexandre Danault 值得编辑此答案以反映 PHP 7 中所做的更改(在下面的另一个答案中提到。)
    • 在 PHP 7 中,您不需要将 $id 放在 function() 中。相反,只需将它传递给 use() 闭包。这应该足以使变量在代码块中可用。
    【解决方案2】:

    在 PHP 7 中语法发生了变化:

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

    【讨论】:

    • 这是离合器。
    • 这是新的正确答案。我有以下错误“不能使用词法变量 $varName 作为参数名称”,这个答案成功了。我什至更新了我的作曲家以更新 guzzle 以查看是否是问题所在。
    【解决方案3】:

    回答@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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 2016-07-01
      • 2021-10-08
      相关资源
      最近更新 更多