DB 테이블에 기본 timestamps 컬럼 외에 다른 날짜타입 컬럼 추가하기
Submitted by river -
등록 10 years ago - 수정 10 years ago
블로그 글을 담고 있는 posts
테이블이 있고, 다음과 같이 컬럼이 구성되어 있다.
Schema::create('posts', function($table)
{
$table->increments('id');
$table->string('title');
$table->timestamps();
// 마지막 수정일
$table->timestamp('last_updated_at');
});
여기서 last_updated_at
은 블로그 글의 최종 수정일을 담기 위해 추가한 timestamp
타입의 컬럼이다.
Laravel에서는 기본 timestamps 컬럼(created_at
, updated_at
, deleted_at
)에 대해서 DB에서 값을 읽어 올 때, Carbon
객체로 변환을 해서 모델 객체에 담는다. 다음이 이에 대한 Laravel 소스이다.
Illuminate\Database\Eloquent\Model.php
의 asDateTime
메소드
/**
* Return a timestamp as DateTime object.
*
* @param mixed $value
* @return \Carbon\Carbon
*/
protected function asDateTime($value)
{
// If this value is an integer, we will assume it is a UNIX timestamp's value
// and format a Carbon object from this timestamp. This allows flexibility
// when defining your date fields as they might be UNIX timestamps here.
if (is_numeric($value))
{
return Carbon::createFromTimestamp($value);
}
// If the value is in simply year, month, day format, we will instantiate the
// Carbon instances from that format. Again, this provides for simple date
// fields on the database, while still supporting Carbonized conversion.
elseif (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $value))
{
return Carbon::createFromFormat('Y-m-d', $value)->startOfDay();
}
// Finally, we will just assume this date is in the format used by default on
// the database connection and use that format to create the Carbon object
// that is returned back out to the developers after we convert it here.
elseif ( ! $value instanceof DateTime)
{
$format = $this->getDateFormat();
return Carbon::createFromFormat($format, $value);
}
return Carbon::instance($value);
}
기본 timestamps
컬럼외에 사용자가 추가한 timestamp
컬럼에 대해서 Carbon
객체로의 변환이 이루어지게 하기 위해서는 Post
모델 객체에 $dates
프로퍼티를 지정해 줘야 한다.
class Post extends Model
{
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = ['last_updated_at'];
}
관련글
Stats
-
0 likes
- 3653 views