![](/img/trans.png)
[英]How do I update multiple columns in a table with multiple conditions in MySQL?
[英]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_day
在today
之前today
然后以1000
塊為單位處理結果,並將他們每個人的pay_day
更新為today
+ interval
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.