Laravel модель Trailing Data при сохранении модели
У меня есть такой код
$editStuState = StuAtt::where('studentId' , '=' , $id)->first();
$editStuState -> leave +=1;
$editStuState -> present = $editStuState -> present-1;
$editStuState->update();
//OR
$editStuState->save();
return 'this is good';
Я не могу сохранить или обновить свои данные, когда я удаляю "Обновить" и "Сохранить связанную строку", он может печатать текст.
это dd($editStuState)
данные
StuAtt {#382 ▼
#table: "stu_attendance"
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:7 [▼
"id" => "7"
"studentId" => "1"
"present" => "2"
"absent" => "1"
"leave" => "10"
"created_at" => "2018-04-16 11:17:41.176898"
"updated_at" => "2018-04-16 06:47:41.000000"
]
#original: array:7 [▼
"id" => "7"
"studentId" => "1"
"present" => "2"
"absent" => "1"
"leave" => "10"
"created_at" => "2018-04-16 11:17:41.176898"
"updated_at" => "2018-04-16 06:47:41.000000"
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
#guarded: array:1 [▶]
}
Я также получил эту форму ошибки Laravel 5.6 это
InvalidArgumentException
Trailing data
Я проверяю свой код построчно, и я думаю, что он не имеет отношения к Carbon согласно моим исследованиям. Как мне это исправить?
2 ответа
Конечные данные являются ошибкой Carbon, потому что вы, вероятно, используете Postgres, а ваша дата возвращает миллисекунды.
"created_at" => "2018-04-19 07:01:19.929554"
Вы можете добавить следующий метод к вашей (базовой) модели.
public function getDateFormat()
{
return 'Y-m-d H:i:s.u';
}
Если вы используете Postgres, вам нужно добавить несколько строк в свои модели. Это происходит из-за TIME WITH TIMEZONE в Postgres.
Пожалуйста, прочтите также Date Mutators
поскольку Laravel уже поддерживает эту встроенную функцию, просто введите строку ниже в своей модели, чтобы переопределить формат даты по умолчанию для этой модели: https://laravel.com/docs/5.7/eloquent-mutators
Перейдите в свое приложение / модель (в app
папка, эксп. User, SomeModel) добавьте строку ниже:
protected $dateFormat = 'Y-m-d H:i:sO';
Лучший
Если ваша база данных - Postgres, а поле - метка времени, иногда Carbon не может конвертировать в формат по умолчанию (без миллисекунд).
Если миллисекунды не нужны, обновите содержимое поля, чтобы оно не содержало миллисекундную часть.
UPDATE YOURTABLE SET created_at = date_trunc('seconds', created_at),
updated_at = date_trunc('seconds', updated_at)
Это нормализует поля с метками времени без миллисекунд.
Измените свой код с:
$editStuState = StuAtt::where('studentId' , '=' , $id)->first();
$editStuState -> leave +=1;
$editStuState -> present = $editStuState -> present-1;
$editStuState->update();
//OR
$editStuState->save();
return 'this is good';
Для того, чтобы:
$editStuState = StuAtt::where('studentId' , '=' , $id)->first();
$editStuState -> leave +=1;
$editStuState -> present = $editStuState -> present-1;
$editStuState->save();
return 'this is good';
Метод ->update(...) используется для массовых обновлений, проверьте Mass Updates
У меня такая же проблема, но я изменил имя столбца на creation_date
, проблема решена.
В моем случае проблема заключалась в длине
created_at
и
updated_at
в таблице. В Navicat оформление стола было таким:
ht tps:https://stackru.com/images/e1b9bfb75f0cadb710fe8968055a06addce9a456.png
Измените его на 0 и сохраните изменения:
ht tps:https://stackru.com/images/84a0f0428f96bb2027a506490cded50b0e509273.png