NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Package Toolkit for Laravel

Migrácie len na publikovanie

Balík postavený na toolkite svoje migrácie nikdy nenačítava automaticky. Hostiteľská aplikácia ich publikuje a spustí migrátor:

php artisan vendor:publish --tag=comments-migrations
php artisan migrate

Deklarácia migrácií

hasMigrations() publikuje každý súbor database/migrations/*.php. hasMigration() pridá jeden zdroj database/migrations/<name>.php.stub — používajte ju len pre súbory .php.stub, pretože súbory .php už zachytí hasMigrations(). Obe publikujú pod tagom <name>-migrations:

$package
    ->name('comments')
    ->hasMigrations()                                  // every database/migrations/*.php
    ->hasMigration('create_comment_reactions_table');  // database/migrations/create_comment_reactions_table.php.stub

Časové pečiatky a poradie

Každý súbor sa publikuje do database/migrations/<Y_m_d_His>_<name>.php, takže sa zaradí medzi vlastné migrácie hostiteľa. Ak balík dodáva viac migrácií, ich pečiatky sa posúvajú o jednu sekundu na súbor v poradí zoradenia adresára balíka — migrácie závislé od tabuliek iných migrácií tak stále bežia v správnom poradí. Migrácie .php.stub deklarované cez hasMigration() nasledujú po súboroch .php v poradí deklarácie. Všetky providery čerpajú z jedného kurzora pre celý proces, takže keď jeden beh vendor:publish publikuje viac balíkov, súbory každého balíka nasledujú za súbormi predchádzajúceho a pečiatky sa nezdieľajú. Časovú pečiatku, ktorou balík prípadne označil zdrojový súbor, nahradí pečiatka publikovania:

package: database/migrations/
    2020_01_01_000000_create_comments_table.php
    create_comment_votes_table.php
    create_comment_reactions_table.php.stub

host, after vendor:publish --tag=comments-migrations: database/migrations/
    2026_07_15_101500_create_comments_table.php
    2026_07_15_101501_create_comment_votes_table.php
    2026_07_15_101502_create_comment_reactions_table.php

Opätovné publikovanie je bezpečné

Resolver cieľa znovu použije súbor, do ktorého už bola migrácia publikovaná, bez ohľadu na jeho pečiatku. Vynútené opätovné publikovanie tak súbor prepíše na mieste namiesto toho, aby pridalo druhú, inak označenú kópiu toho istého Schema::create():

php artisan vendor:publish --tag=comments-migrations --force

Vaše vlastné migrácie sa nikdy neprepíšu

Súbor sa považuje za skoršiu kópiu, len ak má rovnaký názov a zároveň obsah zdrojového súboru balíka — rozdiely v bielych znakoch, napríklad konce riadkov, sa ignorujú. Rovnomenná migrácia s iným obsahom — vlastná create_comments_table vašej aplikácie, migrácia iného balíka alebo kópia, ktorú ste po publikovaní upravili — sa nikdy neprepíše, ani s --force. Migrácia balíka sa publikuje vedľa nej pod novou časovou pečiatkou a o tom, ktorú si ponecháte, rozhodnete vy:

host, before: database/migrations/
    2025_03_02_090000_create_comments_table.php   your app's own — different contents

host, after vendor:publish --tag=comments-migrations --force:
    2025_03_02_090000_create_comments_table.php   untouched
    2026_07_15_101500_create_comments_table.php   the package's, published beside it

Upravili ste publikovanú migráciu? Zmažte duplikát

Upravená kópia sa už nezhoduje so zdrojom balíka, takže ďalšie publikovanie tagu — s --force aj bez neho — pridá migráciu balíka znova vedľa nej, pod novou časovou pečiatkou. Rovnako to dopadne, keď nové vydanie balíka zmení migráciu, ktorú ste už publikovali. Dva súbory create_comments_table spôsobia, že php artisan migrate zlyhá s chybou „table already exists“. Ponechajte kópiu, ktorá už prebehla, novú zmažte a zmenu, o ktorú z nej stojíte, presuňte do vlastnej novej migrácie.

Pomocník MigrationPublisher

Logika pomenovania a cieľa je dostupná aj samostatne, ako RoundlyConsulting\PackageToolkit\Support\MigrationPublisher. destination() prijíma zdrojový súbor balíka, aby mohla pred opätovným použitím súboru hostiteľa porovnať obsah. nextTimestamp() vydá ďalšiu pečiatku publikovania z toho istého kurzora, ktorý používa základný provider — aktuálnu sekundu, alebo o sekundu neskoršiu než posledná vydaná v tomto procese —, takže migrácie vlastného publikovacieho príkazu sa zaradia za všetko ostatné publikované v tom istom behu:

use RoundlyConsulting\PackageToolkit\Support\MigrationPublisher;

MigrationPublisher::nameFor('2020_01_01_000000_create_comments_table.php');
// 'create_comments_table' — extension and any timestamp prefix stripped

MigrationPublisher::nameFor('create_comment_reactions_table.php.stub');
// 'create_comment_reactions_table'

MigrationPublisher::destination(
    __DIR__.'/../database/migrations/create_comments_table.php',   // the package source file
    database_path('migrations'),
    MigrationPublisher::nextTimestamp(),
);
// the file it was already published to (same name, same contents),
// or …/database/migrations/<Y_m_d_His>_create_comments_table.php

resetTimestamps() kurzor zabudne, takže ďalšou pečiatkou bude opäť aktuálna sekunda. Volajte ju v setUp() testovacej sady, ešte pred bootom aplikácie, ak testy fixujú pečiatky publikovania.

Keďže sa nič nenačítava automaticky, vlastná testovacia sada balíka musí migrácie spustiť explicitne — pozrite časť Testovanie.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.