Используя Raw, как вернуть коллекцию обновленной строки?
Например:
$updated = DB::table('users')->where('id', 1)->update(['votes' => 123]);
Я ожидал, что dd($updated)
вернет обновленную строку коллекции, но она вернулась 1.
{{$updated->votes}} should return 123
Это не так, как это работает. Вы не можете ожидать, что этот запрос вернет вам объект:
$updated = DB::table('users')->where('id', 1)->update(['votes' => 123]);
Если вы хотите использовать Query Builder только так, как вы упомянули в своем вопросе, вам нужно будет получить объект вручную:
$data = DB::table('users')->where('id', 1)->first();
С помощью Eloquent вы можете использовать updateOrCreate()
:
$data = User::where('id', 1)->updateOrCreate(['votes' => 123]);
Это вернет объект. update()
вернет boolean, поэтому вы не можете использовать его здесь.
В контроллере вы пишете ниже код для обновления:
$updated = DB::table('users')->where('id', 1)->update(['votes' => 123])->get();
Все функции, относящиеся к базе данных, возвращают одинаковое значение, так как вы запускаете необработанный запрос через собственные функции php.
Если вы запускаете запрос UPDATE или INSERT в PHP, он возвращает boolean. То же самое в Laravel update()
возвращает 1 или 0.
Его полностью нормальные, только функции, которые используют SELECT за кулисами, возвращают объект, содержащий строку. Пример FOr: first()
, get()
, find()
и т. Д.