150 lines
2.9 KiB
PHP
150 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace Illuminate\Database\Eloquent\Concerns;
|
|
|
|
use Illuminate\Support\Facades\Date;
|
|
|
|
trait HasTimestamps
|
|
{
|
|
/**
|
|
* Indicates if the model should be timestamped.
|
|
*
|
|
* @var bool
|
|
*/
|
|
public $timestamps = true;
|
|
|
|
/**
|
|
* Update the model's update timestamp.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function touch()
|
|
{
|
|
if (! $this->usesTimestamps()) {
|
|
return false;
|
|
}
|
|
|
|
$this->updateTimestamps();
|
|
|
|
return $this->save();
|
|
}
|
|
|
|
/**
|
|
* Update the creation and update timestamps.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function updateTimestamps()
|
|
{
|
|
$time = $this->freshTimestamp();
|
|
|
|
$updatedAtColumn = $this->getUpdatedAtColumn();
|
|
|
|
if (! is_null($updatedAtColumn) && ! $this->isDirty($updatedAtColumn)) {
|
|
$this->setUpdatedAt($time);
|
|
}
|
|
|
|
$createdAtColumn = $this->getCreatedAtColumn();
|
|
|
|
if (! $this->exists && ! is_null($createdAtColumn) && ! $this->isDirty($createdAtColumn)) {
|
|
$this->setCreatedAt($time);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set the value of the "created at" attribute.
|
|
*
|
|
* @param mixed $value
|
|
* @return $this
|
|
*/
|
|
public function setCreatedAt($value)
|
|
{
|
|
$this->{$this->getCreatedAtColumn()} = $value;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Set the value of the "updated at" attribute.
|
|
*
|
|
* @param mixed $value
|
|
* @return $this
|
|
*/
|
|
public function setUpdatedAt($value)
|
|
{
|
|
$this->{$this->getUpdatedAtColumn()} = $value;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get a fresh timestamp for the model.
|
|
*
|
|
* @return \Illuminate\Support\Carbon
|
|
*/
|
|
public function freshTimestamp()
|
|
{
|
|
return Date::now();
|
|
}
|
|
|
|
/**
|
|
* Get a fresh timestamp for the model.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function freshTimestampString()
|
|
{
|
|
return $this->fromDateTime($this->freshTimestamp());
|
|
}
|
|
|
|
/**
|
|
* Determine if the model uses timestamps.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function usesTimestamps()
|
|
{
|
|
return $this->timestamps;
|
|
}
|
|
|
|
/**
|
|
* Get the name of the "created at" column.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getCreatedAtColumn()
|
|
{
|
|
return static::CREATED_AT;
|
|
}
|
|
|
|
/**
|
|
* Get the name of the "updated at" column.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getUpdatedAtColumn()
|
|
{
|
|
return static::UPDATED_AT;
|
|
}
|
|
|
|
/**
|
|
* Get the fully qualified "created at" column.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getQualifiedCreatedAtColumn()
|
|
{
|
|
return $this->qualifyColumn($this->getCreatedAtColumn());
|
|
}
|
|
|
|
/**
|
|
* Get the fully qualified "updated at" column.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getQualifiedUpdatedAtColumn()
|
|
{
|
|
return $this->qualifyColumn($this->getUpdatedAtColumn());
|
|
}
|
|
}
|