Do not speak Portuguese? Translate this site with Google or Bing Translator
8 truques com timestamps do Laravel

Posted on: November 03, 2020 08:52 PM

Posted by: Renato

Categories: Laravel

Views: 6358

Por padrão, os modelos do Laravel Eloquent assumem que sua tabela possui campos de carimbo de data/hora-created_at e updated_at. Mas há muitas coisas que você pode fazer para personalizá-los ou realizar algumas operações interessantes. Vamos dar uma olhada.


1. Desativar timestamps

Se sua tabela de banco de dados não tiver esses campos, você tentará fazer algo como Model :: create ($ arrayOfValues); - você obterá um erro de SQL. O Laravel tentaria preencher automaticamente created_at / updated_at e não os encontraria.

Para desativar esses carimbos de data / hora automáticos, em seu modelo do Eloquent você precisa adicionar uma propriedade:

class Role extends Model
{
    public $timestamps = FALSE;

    // ... other model properties and methods
}


 

2. Alterar os nomes das colunas do carimbo de data / hora

E se você estiver trabalhando com um banco de dados não-Laravel e suas colunas de timestamp tiverem nomes diferentes? Talvez você tenha create_time e update_time . Felizmente, você também pode especificá-los no modelo:

class Role extends Model
{
    const CREATED_AT = 'create_time';
    const UPDATED_AT = 'update_time'; 


3. Alterar o formato da data / hora do carimbo de data / hora

Aqui, vou apenas citar a documentação oficial do Laravel:

Antes Laravel 7, datas iria ser serializado para um formato como o seguinte:  2019-12-02 20:01:00De Laravel 7, datas serializada usando o novo formato vai aparecer como:  2019-12-02T20:01:00.283041ZSe você precisar personalizar o formato do carimbo de data / hora, defina a  $dateFormat propriedade em seu modelo. Esta propriedade determina como os atributos de data são armazenados no banco de dados, bem como seu formato quando o modelo é serializado para uma matriz ou JSON:

class Flight extends Model
{
    /**
     * The storage format of the model's date columns.
     *
     * @var string
     */
    protected $dateFormat = 'U';
}

4. Muitos para muitos: Tabela dinâmica com carimbos de data / hora

Uma pequena exceção para a automação de carimbos de data / hora é quando você cria uma tabela dinâmica em relacionamentos muitos para muitos , como a tabela role_user entre usuários e tabelas de funções .

No modelo, você definiria o relacionamento assim:

class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

E então, quando você quiser adicionar uma função a um usuário, você faria algo assim:

$roleID = 1;
$user->roles()->attach($roleID);

Por padrão, essas tabelas dinâmicas não contêm carimbos de data / hora . E o Laravel não tenta preencher created_at / updated_at neste caso.

Mas se você deseja salvar os carimbos de data / hora automaticamente, você precisa adicioná-los ao arquivo de migração e, em seguida, definir o relacionamento usando -> withTimestamps ();

public function roles()
{
    return $this->belongsToMany(Role::class)->withTimestamps();
}

5. Peça por carimbo de data / hora com o mais recente () e o mais antigo ()

Existem dois “atalhos” para ordenar os dados por carimbos de data / hora.

Ao invés de:

User::orderBy('created_at', 'desc')->get();

Você pode fazer isso mais rápido:

User::latest()->get();

Por padrão, latest () ordenará por created_at .

Existe um método oposto mais antigo () que ordenaria por created_em ascendente.

User::oldest()->get();

Além disso, você pode especificar outra coluna para ordenar. Por exemplo, se você deseja usar updated_at , pode fazer o seguinte:

$lastUpdatedUser = User::newest('updated_at')->first();

6. Atualize sem tocar em updated_at

Sempre que você atualiza o registro do Eloquent, ele salva automaticamente o timestamp atual na coluna updated_at , e esse é um ótimo recurso.

Mas às vezes você quer evitá-lo, como incrementa algum valor e não quer considerá-lo como “atualização completa do registro”.

Em seguida, você precisa fazer o mesmo que acima - desative os carimbos de data / hora, mas apenas naquele momento:

$user = User::find(1);
$user->profile_views_count = 123;
$user->timestamps = false;
$user->save();

7. Toque e toque dos pais

Oposto do último exemplo - talvez você queira definir o novo valor para APENAS updated_at coluna, e não alterar os outros.

Então, em vez de:

$user->update(['updated_at' => now()]);

Você pode usar um método mais curto:

$user->touch();

Outro caso - às vezes você deseja não apenas definir updated_at do modelo atual do Eloquent, mas também seu registro pai por relacionamento.

Por exemplo, se algum comentário foi atualizado, então você deve considerar que o registro de postagem deve ter novo updated_at também.

Então, você precisa definir os modelos de “toques dos pais” no modelo do Eloquent:

class Comment extends Model {

    protected $touches = ['post'];

    public function post()
    {
        return $this->belongsTo('Post');
    }

}

8. Os campos de carimbo de data / hora são carbono automaticamente

Última dica de “bônus” - mais como um “lembrete” porque você deve saber sobre isso.

Por padrão, tanto created_at quanto updated_at são convertidos como $ datas do modelo Eloquent, então você pode realizar operações Carbon neles, sem converter para a instância Carbon.

Por exemplo:

$user->created_at->addDays(3);
now()->diffInDays($user->updated_at);

É isso, dicas rápidas, mas espero que úteis!

Fontes:

- https://laravel.com/docs/master/eloquent-mutators#date-mutators

- https://laraveldaily.com/8-tricks-with-laravel-timestamps/

 


0

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email