Добавить к существующему итогу, используя приращение - PullRequest
2 голосов
/ 24 октября 2019

У меня есть небольшая часть моего сайта по сбору средств, и мне нужно продолжать добавлять к общей сумме каждой транзакции и сколько спонсоров я получаю.

Моя транзакция установлена ​​как POST-запрос.

Route::post('/fundraiser/checkout', 'FundController@fundCheckout')->name('fundraiser-checkout');

В моем контроллере я делаю следующее для увеличения sponsors_received и funding_received.

Обратите внимание на ниже $subscription->quantity = указанная сумма. $ 45 * 100 = 4500 центов за полосу.

            $funds = DB::table('funds')->where('cin', $cin)
            ->increment('funding_received', $subscription->quantity)
            ->increment('sponsors_received');

Хотите продолжать добавлять к funding_received итого и sponsors_received.

Это на самом деле добавляет к моему funding received, но не удаетсяна sponsors_received с нечетной ошибкой.

Symfony \ Component \ Debug \ Exception \ FatalThrowableError Вызов функции increment () для целого числа

Если я удаляюfunding_received запрос все отлично работает. (Могу ли я не использовать increment дважды в запросе?)

            $funds = DB::table('funds')->where('cin', $cin)
            ->increment('sponsors_received');

Есть ли другой способ добавить в funding_received, кроме использования increment?

Использование Laravel 6 +

Ответы [ 2 ]

2 голосов
/ 24 октября 2019

Метод increment из Query Builder - это в основном пользовательский вызов update, который обрабатывает процесс приращения. И поскольку это обновление, оно возвращает тот же результат, что и вызов update, то есть количество обновленных записей. Вот почему вы получаете сообщение об ошибке:

Вызов функции-члена increment () для целого числа

Таким образом, вы не можете связать следующий оператор increment, потому что первыйвместо экземпляра Query Builder возвращается число (integer). Однако вы можете сделать что-то вроде этого:

$query = DB::table('funds')->where('cin', $cin);

$query->increment('funding_received', $subscription->quantity)
$query->increment('sponsors_received');

Это создаст базовый запрос с заданным вами условием и выполнит каждый шаг по отдельности.

1 голос
/ 24 октября 2019

Ты прав. Тип возврата public function increment() - int https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Builder.html#method_increment,, поэтому цепочка вызовов на increment() недопустима.

int increment(string $column, float|int $amount = 1, array $extra = [])Увеличить значение столбца на заданную величину. параметрыстрока $columnfloat | int $amountмассив $extraВозвращаемое значениеint

Простой способ обновить это - использовать метод save():

$funds = Funds::where('cin', $cin)->firstOrFail();

$funds->funding_received += $subscription->quantity;
$funds->sponsors_received++;

$funds->save();

Примечание. Предполагается, что у вас есть модель для таблицы funds.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...