[英]Laravel 8.x - How to use updateOrCreate with a where clause?
我正在尝试使用 Laravel updateOrCreate
根据 ID 是否存在来更新本月和上个月的记录。
\App\Models\Result::updateOrCreate(
[
'id' => $request->get('id'),
// where created_at is within the last 2 months
'created_at' => [
'>',
\Carbon\Carbon::now()->startOfMonth()->subMonthsNoOverflow()
],
],
[
'discipline_one' => $request->get('d-one'),
'discipline_two' => $request->get('d-two'),
'discipline_three' => $request->get('d-three'),
'discipline_four' => $request->get('d-four'),
'discipline_five' => $request->get('d-five'),
'discipline_six' => $request->get('d-six'),
]
);
如果 ID 存在,并且结果在当前月份或上个月,则创建新记录而不是更新记录。
预期输入:1(上个月存在)
预期 output:记录已更新
预期输入:2(不存在或不在 2 个月内)
预期 output:已创建新记录
更新:
使用建议的答案,
'id' => $request->get('id'),
'created_at' => \App\Models\Result::whereBetween('created_at', [
\Carbon\Carbon::now()->startOfMonth()->subMonthsNoOverflow(),
\Carbon\Carbon::now()->endOfMonth(),
]),
我得到错误:
Object 的 class Illuminate\Database\Eloquent\Builder 无法转换为字符串
这里是 go:
您只需要在方法的第一个参数中显式定义运算符。
方法的第一个参数中数组的每个元素应该是一个包含三个 arguments 的数组。
列、运算符、值
$startDate = \Carbon\Carbon::now()->startOfMonth()->subMonths(2);
$endDate = \Carbon\Carbon::now()->endOfMonth();
\App\Models\Result::updateOrCreate(
[
[
'id', '=', $request->get('id'),
],
[
'created_at', '>=', $startDate,
],
[
'created_at', '<=', $endDate,
],
],
[
'discipline_one' => $request->get('d-one'),
'discipline_two' => $request->get('d-two'),
'discipline_three' => $request->get('d-three'),
'discipline_four' => $request->get('d-four'),
'discipline_five' => $request->get('d-five'),
'discipline_six' => $request->get('d-six'),
]
);
尝试将您的条件更改为
$start = \Carbon\Carbon::now()->startOfMonth()->subMonths(2);
$end = \Carbon\Carbon::now()->endOfMonth();
$condition = \App\Models\Result::whereBetween('created_at', [$start, $end]);
\App\Models\Result::updateOrCreate(
[
'id' => $request->get('id'),
// where created_at is within the last 2 months
'created_at' => $condition,
],
[
'discipline_one' => $request->get('d-one'),
'discipline_two' => $request->get('d-two'),
'discipline_three' => $request->get('d-three'),
'discipline_four' => $request->get('d-four'),
'discipline_five' => $request->get('d-five'),
'discipline_six' => $request->get('d-six'),
]
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.