<?php
namespace App;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
class UserInformation extends Model {
/**
* The table associated with the model.
*
* @var string
*/
protected $table = "user_information";
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'title',
'first_name',
'last_name',
'img_path',
'born',
'gender',
'address',
'country_id',
'about',
'institution',
'area_of_expertise',
'cv_path',
'facebook',
'twitter',
'instagram',
'linkedin',
'university',
'university_graduated_at',
'md',
'md_graduated_at',
'associate_professor',
'associate_professor_graduated_at'
];
public function setBornAttribute($date) {
$this->attributes['born'] = Carbon::createFromFormat('Y-m-d', $date);
}
public function users() {
return $this->belongsTo('App\User', 'user_id', 'id');
}
}
错误:
SQLSTATE [22007]:无效的日期时间格式:1292日期值不正确: '26 / 10/1988'对于第1行的'born'列(SQL:update
user_information
如何更新:
public function updateUser($request, $id) {
$user = User::with('userInformation')->findOrFail($id);
$user->update(array_filter($request->all()));
$user->userInformation()->update(array_filter($request->only([
'title',
'first_name',
'last_name',
'img_path',
'born',
'gender',
'address',
'country_id',
'about',
'institution',
'area_of_expertise',
'cv_path',
'facebook',
'twitter',
'instagram',
'linkedin',
'university',
'university_graduated_at',
'md',
'md_graduated_at',
'associate_professor',
'associate_professor_graduated_at'
]), 'strlen'));
return User::with('userInformation')->findOrFail($id);
}
我从用户界面发送出生日期d / m / Y格式。当我将这些数据存储在mysql中时,我需要重新格式化为Y-m-d ..
我用Google搜索并发现了变异器: https://laravel.com/docs/5.3/eloquent-mutators
我将setNameAttribute函数添加到UserInformation模型。然后我刷新了页面,然后再次尝试。但没有改变。我得到了同样的错误。
我该如何解决这个问题?
P.S。 :我正在使用Laravel 5.3
答案 0 :(得分:1)
使用碳parse
。
public function setBornAttribute($value)
{
$this->attributes['born'] = Carbon::parse($value);
}
答案 1 :(得分:0)
您必须在模型上设置属性 $ dateFormat ,如下所示:
protected $dateFormat = 'Y-m-d';
答案 2 :(得分:0)
将设置功能更改为:
public function setBornAttribute($date) {
$this->attributes['born'] = Carbon::createFromFormat('d/m/Y', $date)->format('Y-m-d');
}
答案 3 :(得分:0)
以下是答案:
Laravel 5 mutators only work when I create a record and not when I update a record
我将$user->userInformation()->update(
更改为$user->userInformation->update(
并且有效。
答案 4 :(得分:0)
Laravel对日期字段有本机支持。试试这个:
class UserInformation extends Model {
protected $dates = [
'created_at',
'updated_at',
'born'
];
//Rest of model without mutator
}