在Laravel中捕获并保存元素,而不是primaryKey

时间:2019-04-17 15:01:46

标签: php laravel

我需要从数据库中获取一个元素,但是我无法通过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。

1 个答案:

答案 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();