Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasTimestamps.php
Строк: 159
<?php

namespace IlluminateDatabaseEloquentConcerns;

use 
IlluminateSupportFacadesDate;

trait 
HasTimestamps
{
    
/**
     * Indicates if the model should be timestamped.
     *
     * @var bool
     */
    
public $timestamps true;

    
/**
     * The list of models classes that have timestamps temporarily disabled.
     *
     * @var array
     */
    
protected static $ignoreTimestampsOn = [];

    
/**
     * Update the model's update timestamp.
     *
     * @param  string|null  $attribute
     * @return bool
     */
    
public function touch($attribute null)
    {
        if (
$attribute) {
            
$this->$attribute $this->freshTimestamp();

            return 
$this->save();
        }

        if (! 
$this->usesTimestamps()) {
            return 
false;
        }

        
$this->updateTimestamps();

        return 
$this->save();
    }

    
/**
     * Update the model's update timestamp without raising any events.
     *
     * @param  string|null  $attribute
     * @return bool
     */
    
public function touchQuietly($attribute null)
    {
        return static::
withoutEvents(fn () => $this->touch($attribute));
    }

    
/**
     * Update the creation and update timestamps.
     *
     * @return $this
     */
    
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);
        }

        return 
$this;
    }

    
/**
     * 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 IlluminateSupportCarbon
     */
    
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 && ! static::isIgnoringTimestamps($this::class);
    }

    
/**
     * 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());
    }

    
/**
     * Disable timestamps for the current class during the given callback scope.
     *
     * @param  callable  $callback
     * @return mixed
     */
    
public static function withoutTimestamps(callable $callback)
    {
        return static::
withoutTimestampsOn([static::class], $callback);
    }

    
/**
     * Disable timestamps for the given model classes during the given callback scope.
     *
     * @param  array  $models
     * @param  callable  $callback
     * @return mixed
     */
    
public static function withoutTimestampsOn($models$callback)
    {
        static::
$ignoreTimestampsOn array_values(array_merge(static::$ignoreTimestampsOn$models));

        try {
            return 
$callback();
        } finally {
            static::
$ignoreTimestampsOn array_values(array_diff(static::$ignoreTimestampsOn$models));
        }
    }

    
/**
     * Determine if the given model is ignoring timestamps / touches.
     *
     * @param  string|null  $class
     * @return bool
     */
    
public static function isIgnoringTimestamps($class null)
    {
        
$class ??= static::class;

        foreach (static::
$ignoreTimestampsOn as $ignoredClass) {
            if (
$class === $ignoredClass || is_subclass_of($class$ignoredClass)) {
                return 
true;
            }
        }

        return 
false;
    }
}
Онлайн: 1
Реклама