Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
А то у меня что-то не обновляется автоматом. Через touch() в модели не обновляет тоже.
Не в сети
Может стоило бы модель свою показать?
$model->update(['created_at' => now()])
Не в сети
Я через DB::update запрос делаю. Ставлю в `updated_at` = Carbon::now(), получаю SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax. А если скопировать дату прямо из сообщения об ошибке и вставить в updated_at - то нет проблем.
Почему так - не понятно.
Вроде updated_at вообще должен автоматом обновляться.
Изменено evg1401 (15.11.2020 06:02:00)
Не в сети
На сколько я знаю через DB нет. DB и Eloquent это разные вещи. Первая это сухой запрос и он понятия не имеет что тебе там ещё нужно обновить. А второй берет твою модель. Видит что у тебя там прописано что нужно обновить таймстамп и обновляет. А в чем проблема обновить через Eloquent? Приведите всю строку кода с запросом в котором возникает ошибка.
Не в сети
DB::update("UPDATE `goods` SET `volume` = $request->volume, `price` = $request->price, `updated_at` = Carbon::now() WHERE `id` = $id");
Ну, по идее такой запрос должен срабатывать? Он выдает ошибку описанную выше.
Не в сети
А в чем проблема обновить через Eloquent?
Никаких проблем. У меня все запросы к бд в коде через DB, а тут ни с того, ни с другого неохота разбавлять код или все исправлять.
У меня привычка уже сложилась использовать sql в чистом виде, мне так больше нравится.
Изменено evg1401 (15.11.2020 20:30:43)
Не в сети
Странно. Зачем тогда вообще использовать фреймворк, если вам нравится писать больше кода ручками? Неужели этот ваш запрос выглядит лучше чем мой?
$good->update($request->all());
Не в сети
В запрос-то все равно надо вставлять имена полей и таблиц, так что великой разницы с моей точки зрения нет. А laravel мне нравится в первую очередь не из-за возможностей Eloquent.
Не в сети
Не всегда нужно все подставлять. В данной ситуации мой запрос абсолютно эквивалентен вашему, но короче раз в 5. И это только на одном запросе. Дело, конечно, ваше. Если вам так принципиально делать это с использованием DB, то попробуйте заменить Carbon::now() на now(). Если не сработает, то приведите полный текст ошибки.
Не в сети
В данном случае request->all() не обойтись, мне же все равно нужно указать, что обновлять.
now() тоже пробовал и судя по ошибке результат еще более бесполезен, т.к. now() вообще ничего не подставляет и интерпретируется прямо как строка.
В общем почему мускул ругается не понятно, пока обойдусь отдельным запросом для даты. Спс
Не в сети
Ну ты всегда можешь использовать
$request->only(['volume', 'price'])->all()
Это все равно короче
Не в сети
Бесспорно! Со следующим сайтом попробую)
Не в сети
'updated_at' => DB::raw('NOW()')
Не в сети