Поймать и сохранить элементы в Laravel, а не по primaryKey - PullRequest
2 голосов
/ 17 апреля 2019

Мне нужно получить элемент из базы данных, но я не могу получить его методом 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 Ответ

5 голосов
/ 17 апреля 2019

Функция ->find() возвращает экземпляр Eloquent Model, после чего вы можете вызвать ->save() для экземпляра модели.

Вы используете ->get(), который возвращает Collection.

Чтобы обновить ваш запрос (, который может быть нацелен на одну или несколько записей ), просто выполните оператор обновления непосредственно из QueryBuilder, заменив ->get() на ->update(['med_obs' => $request->med_obs]).

Имейте в виду, что при этом вы теперь используете Fluent запросы, а не eloquent. Это означает, что любая логика, определенная вами в функции 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...