我需要从数据库中获取一个元素,但是我无法通过FIND方法获取它,因为FIND仅通过primaryKey找到它,而我不需要的是我的primaryKey。所以我确实是这样的:
$user = Pac::find($request->pac_id);
$element = query()->where('med_cart', $user->pac_id)->get();
$element->med_obs = $request->med_obs;
$element->save(); // error
现在我需要保存此元素,但是,我不能使用SAVE方法,因为我认为它与FIND和FINDORFAIL完全相关(如果有人知道,请向我解释可以使用SAVE方法的方法)。
我该如何保存它们?还是有其他方法可以做到?
因为我需要使用除primaryKey以外的数据获取元素,然后将其保存,所以我不能使用FIND或FINDORFAIL。
答案 0 :(得分:5)
函数->find()
返回一个雄辩的Model
实例,然后您可以在模型实例上调用->save()
。
您使用的是->get()
,它返回一个Collection
。
要更新您的查询(可能指向一个或多个条目的 ),只需通过将->get()
替换为->update(['med_obs' => $request->med_obs])
,直接从QueryBuilder中执行更新语句。
请注意,在执行此操作时,您现在正在使用Fluent查询,而不是雄辩的。这意味着您在模型的boot
函数中定义的任何逻辑都不会得到评估。
如果确定只有一个结果,则可以将->first()
附加到查询中,这将返回与->where
子句匹配的第一个结果的模型。然后,您可以在其上拨打->save()
:
$user = Pac::find($request->pac_id);
$element = query()->where('med_cart', $user->pac_id)->first();
$element->med_obs = $request->med_obs;
$element->save();