gpt4 book ai didi

php - Laravel eloquent 更新记录最小值

转载 作者:行者123 更新时间:2023-11-29 10:05:48 37 4
gpt4 key购买 nike

我需要找到最小的“优先级”值,然后使用 laravel eloquent 将其值设置为另一个条目。

有什么方法可以做到这一点或有任何最佳实践吗?

我的想法:

Orders::where('user_id', '!=', $user_id)
->where('odm_id', $odm_id)
->whereExpired(0)
->min('priority')
->update(['priority' => 1]);

仅供引用:上述方法出现错误并且不起作用。错误消息是:

Call to a member function update() on string

最佳答案

问题是 min 将返回一个数字而不是实际模型。如果您想要具有最小值的实际模型,您需要类似:

Orders::where('user_id', '!=', $user_id)
->where('odm_id', $odm_id)
->wherePriority(function ($query) use ($user_id, $odm_id) {
$query->from(\DB::raw('(SELECT * FROM orders) AS o'))
->selectRaw("MIN(`o`.`priority`)")
->where('o.odm_id', $odm_id)
->where('o.expired', 0);
})->update(['priority' => 1]);

请注意,这将更新已过期 0、odm_id 等于 $odm_id 并匹配最小值的所有记录。

或者你可以这样做:

$orders =Orders::where('user_id', '!=', $user_id)
->where('odm_id', $odm_id)
->wherePriority(function ($query) use ($user_id, $odm_id) {
$query->from(\DB::raw('(SELECT * FROM orders) AS o'))
->selectRaw("MIN(`o`.`priority`)")
->where('o.odm_id', $odm_id)
->where('o.expired', 0);
})->get();

$orders->each(function ($order) {
$order->priority = 1;
$order->save();
});

第二种方法的缺点是需要执行 2 个单独的查询,一个用于获取数据,另一个用于更新,但这具有触发模型事件(例如保存等)的优点。

关于php - Laravel eloquent 更新记录最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51944101/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com