簡體   English   中英

如何在 Laravel 中使用各自的值更新多個列?

[英]How do I update multiple columns with their respective values in laravel?

我有一個數據庫記錄,我想根據某些條件進行更新。 此條件是:當達到pay_day時,我想向擁有該記錄的用戶發送一封電子郵件,然后使用用戶表上的interval_day列將pay_day列更新為pay_day另一個日期。 interval_day只是用戶選擇的數字。

下面是一個插圖:

$now = Carbon::now();

User::where('approved', true)
            ->where('pay_day', '<', $now)
            ->chunkById(1000, function($users){
                foreach ($users as $user) {

                    $interval = $user->interval;
                    $payDay = $now()->addDays($interval);

                    // update the user...
                    $user->update([
                        'pay_day' => $payDay,
                    ]);
                    // if the user was updated, send an email next...
                }
                
            });

現在,假設我有 100 個具有不同interval值的不同用戶。 我希望它們在其interval列中各自的值是將更新到其pay_day列的值,而不是所有 100 個用戶的相同日期。

但是當我運行上面的查詢時,它沒有更新, pay_day和發送電子郵件都沒有更新給相應的用戶。 當我 dd($interval & $payDay) 時,它什么都不返回。

請問我做錯了什么? 我需要你的建議。 提前感謝您的時間。

像這樣使用

$updates = ([
                    'pay_day' => $payDay,
                  //other columns
                ]);
$x = User::where('approved', true)
        ->where('pay_day', '<', $now)->->update($updates);
if($x){
//succeed case
}

不確定$payDay = $now()->addDays($interval); 是一個錯字,或者你實際上已經在你的代碼中這樣做了,但是$now是一個變量而不是一個函數。 此外,您需要告訴chunkById函數中的閉包use $now

\App\Models\User::where('approved', true)
    ->where('pay_day', '<', \Carbon\Carbon::today())
    ->chunkById(1000, function ($users) {
        $users->each(function ($user) {
            $success = $user->update([
                'pay_day' => \Carbon\Carbon::today()->addDays($user->interval)
            ]);
            if ($success) {
                // send email
            }
    });
});

上面找到所有approved Users ,他們的pay_daytoday之前today然后以1000塊為單位處理結果,並將他們每個人的pay_day更新為today + interval值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM