我的类中有一个名为start_dt的datetime属性。当它被保存时,它需要保存为日期时间,当它被检索时,我需要自己的日期,小时和分钟,以便我可以在表单模型绑定的刀片模板中填充一些字段。相同的表单用于创建和更新。
如上所述,以我需要的格式检索此属性的正确方法是什么,即我需要仅使用start_dt属性的日期部分填充start_dt字段,但如果我们要创建新用户,那么它应该默认到今天的日期。类似地,start_hr和start_min下拉列表需要预先选择小时和分钟(如果是)和更新,如果我们正在创建新用户则需要'00'。
在数据库中,start_dt属性存储为日期时间值,例如2015-11-11 12:38:00。因此,当我们保存时,我需要更新从下拉列表中选择的小时和分钟。你怎么能这样做?
class User extends Model {
protected $dates = ['start_dt'];
public function setStartDtAttribute($startDt, $startHr, $startMin)
{
$this->attributes['start_dt'] = ;
}
}
{!! Form::text('start_dt', isset($user->start_dt) ? $user->start_dt->format('d-m-Y') : Carbon::now()->format('d-m-Y'), ['class' => 'form-control']) !!}
{!! Form::select('start_hr', [
'00' => '00',
'01' => '01',
'02' => '02',
...
'23' => '23'], isset($user->start_dt) ? $user->start_dt->hour : '00', ['class' => 'form-control']) !!}
{!! Form::select('start_min', [
'00' => '00',
'01' => '01',
'02' => '02',
...
'59' => '59'], isset($user->start_dt) ? $user->start_dt->hour : '00', ['class' => 'form-control']) !!}
答案 0 :(得分:0)
如果您查看文档中的date mutators,他们会举例:
return $user->deleted_at->getTimestamp();
所以在你的mutator方法中,你可以这样做:
public function getStartDtAttribute($value)
{
return Carbon::createFromTimestamp($value->getTimestamp());
}
现在你有了一个碳对象,只需使用像$user->startDt->year
这样的东西就可以访问年份,月份等。 Check here for the api
要设置新开始日期的当前日期,您可以创建新的日期时间:
...
$user = new User();
$user->startDt = Carbon::now();
...
或者为了方便起见,您可以在迁移设置中创建默认值。
Schema::table('users', function ($table) {
....
$table->dateTime('start_dt')->default(Carbon::now();
....
});
答案 1 :(得分:0)
public function setStartDtAttribute($startDt, $startHr, $startMin)
{
// i guess the $startDt is the column you want to update
$splitDateTime = explode(" ",$startDt);
$datePart = explode("-", $splitDateTime[0]);
$timePart = explode(":", $splitDateTime[1]);
// i dont understand the $startDT variable but the $startHr
// and $startMin i know its the hour and minutes part of the time
// Now that the string is splitted into array lets replace the
// parts that you want to replace
//index 0 of the $timePart is the hour and 1 is the minutes
$timePart[0] = $startHr;
$timePart[1] = $startMin;
// Now lets join the arrays(ie. $datePart and $timePart)
// to form the datetime
$datePart = implode("-",$datePart);
$timePart = implode(":",$timePart);
$dateTime = $datePart . " " . $timePart
$this->attributes['start_dt'] = $dateTime;
}
您可以选择在保存之前将最终字符串转换为DateTime对象。我希望这会对你有所帮助。