我正在向我的数据库发布日期。列类型是TIMESTAMP,但无论我发送什么,laravel都不会转换日期。我已经手动检查过Carbon :: parse()可以格式化我正确发送的日期,这很好。
发布日期示例:{ "interview_date": "18 December 2015 - 14:24" }
在数据库中保存为:0000-00-00 00:00:00
返回为:{ "interview_date": "-0001-11-30 00:00:00" }
我在laravel模型中设置了protected $dates = ['interview_date'];
。
我的约会发生了什么事?任何帮助将不胜感激。
由于
乔
更新:型号/控制器/ Laravel 5.1
<?php
namespace App\Clients;
use AlgoliaSearch\Laravel\AlgoliaEloquentTrait;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
use AlgoliaEloquentTrait;
public $primaryKey = "m_id";
protected $dates = ['interview_date'];
public $timestamps = false;
public static $objectIdKey = 'member_lead_trace';
public $indices = ['dev_leads'];
protected $casts = [
'interview_notes_received' => 'boolean',
'interview_complete' => 'boolean',
];
public function leads()
{
return $this->hasOne('App\Lead', 'id', 'member_lead_trace');
}
public function personal()
{
return $this->hasOne('App\Personal', 'mem_id', 'm_id');
}
public function wants()
{
return $this->hasOne('App\Want', 'mem_id', 'm_id');
}
public function photos()
{
return $this->hasMany('App\Photo', 'mem_id', 'm_id');
}
public function attributes()
{
return $this->hasMany('App\Attribute', 'mem_id', 'm_id');
}
public function financial()
{
return $this->hasOne('App\Financial', 'mem_id', 'm_id');
}
public function profile()
{
return $this->hasOne('App\Profile', 'mem_id', 'm_id');
}
}
控制器功能
public function update(Request $request)
{
$data = json_decode($request->data, true);
//return Carbon::parse($request->interview_date);
try {
return Member::where('member_lead_trace', $request->user)->update($data);
} catch (Exception $e) {
echo $e->getMessage();
}
}
答案 0 :(得分:1)
使用修补程序运行Carbon,解析方法在您的示例中显示的时间似乎不起作用
Carbon::parse('18 December 2015 - 14:24');
消息'DateTime :: __ construct()的异常:无法解析位置17( - )的时间字符串(2015年12月18日 - 14:24):意外字符'
但是删除 - 它正确分析
Carbon::parse('18 December 2015 14:24');
返回有效的Carbon实例
Carbon\Carbon {#673 +"date": "2015-12-18 14:24:00.000000"
+"timezone_type": 3 +"timezone": "UTC" }
删除 - 的替代方法是指定可以这样做的格式
Carbon::createFromFormat('d F Y - G:i', '18 December 2015 - 14:24');
假设您在当天有小前导零,小时看format options,如果不是这样的话。
更新:
在查看你的代码并查看Laravel一直在做什么后,我认为我们一直在假设Laravel会自动找出日期格式。我很高兴在这方面被证明是错误的。
然而,我提出的解决方案似乎是有效的
public function setInterviewDateAttribute($value)
{
$this->attributes['interview_date'] = Carbon::createFromFormat('d F Y - H:i', $value)->toDateString();
}
答案 1 :(得分:0)
mysql中日期的默认格式为YYYY-mm-dd HH:MM:SS
。
你只需要那种格式的疼痛。
所以在插入数据之前,请像这样转换日期,
$d = "date in other format";
$date =date("Y-m-d H:i:s,strtotime($d));