Laravel: лучший способ обновить базу данных (один лайнер)? - PullRequest
0 голосов
/ 01 сентября 2018

Итак, я ищу обновление базы данных MySQL, и это мой текущий код обновления:

    $currentMinute = Carbon::now();
    $nextMinute = $currentMinute->copy()->addMinute();

    $transfersWithinRange = Account::whereBetween('next_vc_transfer', [$currentMinute, $nextMinute])->get(); 

    if (count($transfersWithinRange) > 0) {
        foreach ($transfersWithinRange as $transfer) {
            $transfer->balance = $transfer->balance + 0.25;
            $transfer->next_vc_transfer = Carbon::parse($transfer->next_vc_transfer)->addMinutes(15);
            $transfer->save();
        }
    }

Мой босс сказал, что для этого был один лайнер. Я думал что-то вроде этого:

 Account::increment('balance', .25, ['next_vc_transfer' => Carbon::parse($transfer->next_vc_transfer)->addMinute(15)]).whereBetween('next_vc_transfer', [$currentMinute, $nextMinute]);

// obviously, $transfer won't work with this liner

Мысли

1 Ответ

0 голосов
/ 01 сентября 2018

Итак, вот что я придумал для одного лайнера:

 Account::whereBetween('next_vc_transfer_at', [$currentMinute, $nextMinute])
     ->update([
         'balance' => DB::raw('balance + 0.25'),
         'next_vc_transfer_at' => $newVCTransferAt
     ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...