DEV Community

Juraj Chovan
Juraj Chovan

Posted on

1

Laravel: Prístup viacerých aplikácii na rovnakú databázu

V prípade, že potrebujem na rovnakú databázu (v príklade nižšie používaná - MySQL) pristupovať z viacerých Laravel aplikácii, a to tak, aby každá z nich mala vlastnú db-tabuľku používateľov a vlastný autentifikačný mechanizmus (nezávislý od druhej aplikácie) tu je návod ako to urobiť.

A.) Prvá aplikácia "LaravelApp01" využivajúca JetStream autentifikáciu a manažovanie používateľa:

1.) Najprv si vytvorím prvú Laravel aplikáciu, spustením príkazu

composer create-project laravel/laravel LaravelApp01
Enter fullscreen mode Exit fullscreen mode

a v podadresári "LaravelApp01" je vytvorená základná štruktúra Laravel aplikácie.

2.) predpokladajme, že potrebnú MySQL databázu už mám vytvorenú (a volá sa "db01".

3.) túto databázu si nastavím/pripojím na ňu aplikáciu "LaravelApp01", a to skonfigurovaním aplikačného/konfiguračného súboru ".env", kde si nastavím:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=****
Enter fullscreen mode Exit fullscreen mode

4.) táto prvá Laravel aplikácia bude používať autentifikáciu, registráciu a prihlasovanie cez package "JetStream", takže je potrebné si zinštalovať tento package do aplikácie "LaravelApp01" - v aplikačnom/projektovom adresári spustiť príkaz:

composer require laravel/jetstream
Enter fullscreen mode Exit fullscreen mode

čím sa tento package zinštaluje

5.) ak si teraz spustím developovací server príkazom:

php artisan serve
Enter fullscreen mode Exit fullscreen mode

a v prehliadači si zobrazím URL:

http://localhost:8000/
Enter fullscreen mode Exit fullscreen mode

tj.úvodnú stránku aplikácie "LaravelApp01", vidím tam už aj "Log in" a "Register" odkaz, ale tieto ešte nefungujú. Aplikácia nevie nájsť "auth.login", resp."auth.register"

6.) je potrebné ešte spustiť príkaz:

php artisan jetstream:install livewire
Enter fullscreen mode Exit fullscreen mode

čo vytvorí potrebné migračné skripty, zinštaluje sa package "livewire/livewire" a aktualizujú sa niektoré ďalšie package, a vypublikujú sa potrebné asset-y a vybuild-uje sa aplikácia

7.) je potrebné spustiť migráciu, tj.vytvorenie potrebných db-tabuliek a modelov, príkazom:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

a v databáze "db01" sú vytvorené db-tabuľky (6ks):

  • failed_jobs
  • migrations
  • password_reset_tokens
  • personal_access_tokens
  • sessions
  • users

8.) ak teraz znovu spustím developovací server a URL aplikácie, už budú fungovať aj odkazy "Login" a "Register" a aj funkcionalita skrývajúca sa za nimi, tj.viem sa zaregistrovať a následne prihlásiť (a potom aj odhlásiť z aplikácie).

B.) Druhá aplikácia "LaravelApp02" využivajúca Bootstrap/UI autentifikáciu a manažovanie používateľa:

1.) opäť podobným spôsobom vytvorím aj druhú Laravel aplikáciu:

composer create-project laravel/laravel LaravelApp02
Enter fullscreen mode Exit fullscreen mode

a v podadresári "LaravelApp02" je vytvorená základná štruktúra Laravel aplikácie.

2.) aplikácia "LaravelApp02" bude tiež napojená na rovnakú databázu, takže nastavenie v súbore ".env" bude tiež:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=***
Enter fullscreen mode Exit fullscreen mode

3.) táto druhá Laravel aplikácia "LaravelApp02" bude na autentifikáciu a manažovanie používateľov používať package "bootstrap/ui"

4.) ale ešte pred tým, je potrebné si premenovať názov db-tabuľky, do ktorej si bude táto druhá aplikácia ukladať svojích používateľov (prvá aplikácia "LaravelApp01" má pre tento účel zriadenú default-nú db-tabuľku "users").
Pre druhú aplikáciu si zvolíme napr.názov "admins".

5.) nájsť si súbor migrácie pre "users":

\database\migrations\2014_10_12_000000_create_users_table.php
Enter fullscreen mode Exit fullscreen mode

a tu zeditovať kód takto:

...
return new class extends Migration  {
    public function up(): void    {
        Schema::create('admins', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down(): void    {
        Schema::dropIfExists('admins');
    }
};
Enter fullscreen mode Exit fullscreen mode

6.) prípadne - ak potrebujem, môžem doplniť nejaké ďalšie atribúty/stlpce, napr.:

...
    $table->string('BusinessName');
    ...
Enter fullscreen mode Exit fullscreen mode

7.) a ešte, kvôli konzistencii je potrebné vhodne premenovať aj tento súbor, tj.pôvodný názov:

\database\migrations\2014_10_12_000000_create_users_table.php
Enter fullscreen mode Exit fullscreen mode

zmeniť na:

\database\migrations\2014_10_12_000000_create_admins_table.php
Enter fullscreen mode Exit fullscreen mode

8.) teraz je čas zinštalovať package "bootstrap/ui" do aplikácie "LaravelApp02" - v aplikačnom/projektovom adresári spustiť príkaz:

composer require laravel/ui
Enter fullscreen mode Exit fullscreen mode

a následne spustiť príkaz:

php artisan ui bootstrap --auth
Enter fullscreen mode Exit fullscreen mode

a na koniec ešte odporúčajú spustiť:

npm install && npm run dev
Enter fullscreen mode Exit fullscreen mode

9.) a teraz spustiť migračné súbory príkazom:
php artisan migrate
a v databáze "db01" sú vytvorené iba dve nové db-tabuľky:

  • admins
  • password_resets

db-tabuľka "admins" bude slúžiť na správu používateľov Laravel aplikácie "LaravelApp02"

10.) ešte je potrebné zmeniť/doplniť v modeli "User":

\app\Models\User.php
Enter fullscreen mode Exit fullscreen mode

kód takto:

...
class User extends Authenticatable  {
    use HasApiTokens, HasFactory, Notifiable;
    protected $table = 'admins';
    ...
Enter fullscreen mode Exit fullscreen mode

11.) a ak som v migrácii (viď krok 6.) doplňal nejaký nový atribút, je potrebné ho doplniť aj tu v modeli:

...
    protected $fillable = [
        'name',
        'email',
        'password',
        'BusinessName',
    ];
Enter fullscreen mode Exit fullscreen mode

12.) doplniť ešte do súboru:

\config\auth.php
Enter fullscreen mode Exit fullscreen mode

takýto kód:

<?php
return [
    'table' => 'admins',
    ...
Enter fullscreen mode Exit fullscreen mode

13.) a aby fungovali zápisy vkladaných hodnôt pri registrácii, je potrebné ešte zeditovať v súbore:

\app\Http\Controllers\Auth\RegisterController.php
Enter fullscreen mode Exit fullscreen mode

kód takto:

...
    protected function validator(array $data)    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:admins'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }
Enter fullscreen mode Exit fullscreen mode

14.) ak teraz v tejto druhej Laravel aplikácii "LaravelApp02" spustím developovací server a dám si zobraziť úvodnú stránku aplikácie, tj.:

http://localhost:8000/
Enter fullscreen mode Exit fullscreen mode

mám na stránke odkazy "Login" a "Register" a funkcionalita pod nimi funguje, viem sa zaregistrovať a prihlásiť (a aj odhlásiť) a údaje o registrovanom používateľovi sa zapisujú do db-tabuľky "admins"

C.) Tretia aplikácia "LaravelApp03" využivajúca JetStream package na autentifikáciu a manažovanie používateľa:

A vytvorím si ešte aj tretiu Laravel aplikáciu "LaravelApp03", ktorá bude používať (rovnako ako package "LaravelApp01") "JetStream" package na autentifikáciu používateľa.

1.) vytvorím si tretiu aplikáciu príkazom:

composer create-project laravel/laravel LaravelApp03
Enter fullscreen mode Exit fullscreen mode

2.) v súbore ".env" si nastavím potrebnú databázu:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=***
Enter fullscreen mode Exit fullscreen mode

3.) v databáze "db01" mám v tomto momente už vytvorené db-tabuľky:

  • admins (používatelia pre druhú aplikáciu "LaravelApp02")
  • failed_jobs
  • migrations
  • password_resets (resetovanie hesiel pre druhú aplikáciu "LaravelApp02")
  • password_reset_tokens
  • personal_access_tokens
  • sessions
  • users (používatelia pre prvú aplikáciu "LaravelApp01")

a tretia Laravel aplikácia "LaravelApp03" bude mať samostatnú db-tabuľku pre svojích používateľov, napr."members"

4.) v tretej aplikácii si zinštalovať package "JetStream" príkazom:

composer require laravel/jetstream
Enter fullscreen mode Exit fullscreen mode

nasleduje príkaz:

php artisan jetstream:install livewire
Enter fullscreen mode Exit fullscreen mode

čo vytvorí migračné skripty, zinštaluje package "livewire/livewire" a (aktualizuje) niektoré ďalšie package, a vypublikuje asset-y a vybuild-uje aplikáciu.

5.) v existujúcom migračnom skripte:

\database\migrations\2014_10_12_000000_create_users_table.php
Enter fullscreen mode Exit fullscreen mode

si upraviť kód - zmena názvu db-tabuľky z "users" na "members":

...
return new class extends Migration  {
    public function up(): void    {
        Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->foreignId('current_team_id')->nullable();
            $table->string('profile_photo_path', 2048)->nullable();
            $table->timestamps();
        });
    }
    public function down(): void    {
        Schema::dropIfExists('members');
    }
};
Enter fullscreen mode Exit fullscreen mode

6.) a kvôli konzistencii si premenovať aj tento migračný súbor, tj.z:

\database\migrations\2014_10_12_000000_create_users_table.php
Enter fullscreen mode Exit fullscreen mode

premenovať na:

\database\migrations\2014_10_12_000000_create_members_table.php
Enter fullscreen mode Exit fullscreen mode

7.) teraz možno spustiť samotnú migráciu:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

a v databáze "db01" je vytvorená nová db-tabuľka "members"

8.) ešte je potrebné zmeniť/doplniť v modeli "User":

\app\Models\User.php
Enter fullscreen mode Exit fullscreen mode

doplniť názov db-tabuľky s ktorou má pracovať:

...
class User extends Authenticatable  {
    use HasApiTokens;
    use HasFactory;
    ...
    protected $table = 'members';
    ...
Enter fullscreen mode Exit fullscreen mode

9.) a doplniť ešte do súboru:

\config\auth.php
Enter fullscreen mode Exit fullscreen mode

odkaz/referenciu na používanú db-tabuľku:

<?php
return [
    'table' => 'members',
    ...
Enter fullscreen mode Exit fullscreen mode

10.) ak teraz spustím developovací server v rámci tretej aplikácie "LaravelApp03" a v prehliadači URL:

http://localhost:8000/
Enter fullscreen mode Exit fullscreen mode

viem sa registrovať (a následne aj prihlásiť) do tejto Laravel aplikácie, a data sa zapisujú do db-tabuľky "members"

11.) mám takto vytvorené tri nezávislé aplikácie "LaravelApp01", "LaravelApp02" a "LaravelApp03", každá z nich má vlastný autentifikačný systém ("LaravelApp01" a "LaravelApp03" majú package "JetStream" a "LaravelApp02" má "bootstrap/ui") a každá z nich si svojích používateľov uchováva v samostatnej db-tabuľke ("LaravelApp01" v db-tabuľke "users", "LaravelApp02" v db-tabuľke "admins" a "LaravelApp03" v db-tabuľke "members"). Zároveň ostatné db-tabuľky (a data) môžem rovnocenne použiť vo všetkých troch aplikáciách.

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay