语法错误,意外的“-=”(T_MINUS_EQUAL),需要“]”

syntax error, unexpected '-=' (T_MINUS_EQUAL), expecting ']'

我已经在控制器上写了这个用于更新存在于 user_wallet table 的 balance 字段(这是 User 中的枢轴 table & Wallet 模型 - 多对多关系)。

$wallet = Wallet::find($wallet_id);
if($value_added_type == '-')
   $wallet->users()->updateExistingPivot($user_id,["balance"-=$amount_add_value]);
else
   $wallet->users()->updateExistingPivot($user_id,["balance"+=$amount_add_value]);

所以我说"balance"-=$amount_add_value因为我需要这样计算余额:

balance = balance - $amount_added_value

如果 $value_added_type 增加:

balance = balance + $amount_added_value

但现在我得到这个错误:

syntax error, unexpected '-=' (T_MINUS_EQUAL), expecting ']'

那么在这种情况下如何正确计算 balance 呢?

非常感谢你们的任何想法或建议...

提前致谢。

UPDATE #1:

我试过这个来更新 balance 字段:

// Getting balance field in pivot table based on user_id & wallet_id
$bal = Wallet::with("users")->whereHas('users', function ($query) use ($wallet_id,$user_id) {
    $query->where('wallet_id',$wallet_id);
    $query->where('user_id',$user_id);
});

// updating balance field    
$wallet = Wallet::find($wallet_id);
if($value_added_type == '-'){
    $wallet->users()->updateExistingPivot($user_id,["balance" => ($bal - $amount_add_value)]);
}else{
    $wallet->users()->updateExistingPivot($user_id,["balance" => ($bal + $amount_add_value)]);
}

但现在我得到这个错误:

Object of class Illuminate\Database\Eloquent\Builder could not be converted to number

["xxx" -= 123]["xxx" += 123] 不是有效的 PHP 语法。必须是 ["xxx" => ($balance - 123)]["xxx" => ($balance + 123)].

您混淆了一个变量:

$variable -= 123;
$variable += 123;

[ ] 用于数组,与 array():

相同
$array1 = [
    "index1" => 123
];

echo $array1["index1"];

那将打印 123...


编辑:

对于您的新更新,您尝试使用 $bal 作为数字值,但这是一个 Builder 作为错误状态,您必须执行 ->first() 以便您得到Model 然后你可以做 $bal->balance.

所以,这样做:

// Getting balance field in pivot table based on user_id & wallet_id
$bal = Wallet::with("users")->whereHas('users', function ($query) use ($wallet_id,$user_id) {
    $query->where('wallet_id',$wallet_id);
    $query->where('user_id',$user_id);
})->first();

// updating balance field    
$wallet = Wallet::find($wallet_id);
if($value_added_type == '-'){
    $wallet->users()->updateExistingPivot($user_id, ["balance" => ($bal->balance - $amount_add_value)]);
}else{
    $wallet->users()->updateExistingPivot($user_id, ["balance" => ($bal->balance + $amount_add_value)]);
}

或使用与balance相关的相应字段。我用了 ->balance 但我不知道你的 Model/Database 是什么。