Si të integrohet Supabase me Laravel për bazën e të dhënave dhe ruajtjen

Përditësimi i fundit: 5 dhjetor 2025
  • Konfigurimi i Laravel për të përdorur bazën e të dhënave Supabase Postgres përfshin rregullimin e saktë të variablave të drajverit, skemës dhe mjedisit.
  • Drajveri specifik i Supabase për Laravel zgjidh automatikisht problemet e zakonshme me kolonat UUID në pyetje dhe bashkime.
  • Përshtatësi Flysystem ju lejon ta trajtoni Supabase Storage si një disk tjetër Laravel, duke integruar lehtësisht ngarkimet e skedarëve.
  • Përdorimi i çelësave të shërbimit të privilegjuar dhe kovave të konfiguruara mirë është çelësi për të shmangur gabimet e shkrimit dhe për të siguruar një rrjedhë të qëndrueshme.

Supabase për Laravel

Nëse punoni me Laravel dhe jeni të përkushtuar ndaj programim në prapavijë dhe ke dëshirë të bësh një hap drejt një baze të dhënash PostgreSQL moderne dhe e menaxhuar si SupabaseNdoshta e keni vënë re se nuk mjafton të ndryshoni vetëm disa variabla në skedarin .env. Ekzistojnë detaje lidhjeje, skema, autentifikim dhe ruajtje skedarësh që, nëse lihen pas dore, mund të çojnë në disa gabime mjaft të fshehta.

Për më tepër, kur doni të shkoni një hap më tej dhe të përdorni Supabase si ruajtje skedarësh Kur integrohet me sistemin e ruajtjes së Laravel, gjërat bëhen pak më komplekse: çelësat e shërbimit, bucket-et, pikat fundore, drajverët e personalizuar të Flysystem, etj. Lajmi i mirë është se gjithçka - baza e të dhënave, ruajtja dhe trajtimi i UUID - mund të integrohen në mënyrë të përsosur në një mënyrë mjaft të pastër.

Lidhja e Laravel me bazën e të dhënave Supabase

Hapi i parë është të keni një projekt Laravel funksional dhe ta lidhni atë me bazën e të dhënave Postgres të ofruar nga Supabase. Për këtë, ju nevojitet një mjedis me PHP dhe Composer u përditësuan dhe krijoni një projekt të ri ose përdorni një ekzistues. Nga konzola, thjesht gjeneroni projektin me komandën tipike Laravel dhe më pas filloni të konfiguroni lidhjen.

Pasi të keni skeletin e projektit, hapi i zakonshëm është instalimi i një sistemi të thjeshtë vërtetimi. Laravel Breeze përshtatet shumë mirë sepse përfshin Shabllone tehësh dhe rrjedha bazë e hyrjes dhe regjistrimitKjo ju lejon të verifikoni shpejt që lidhja juaj me bazën e të dhënave është konfiguruar siç duhet dhe që mund të krijoni përdorues pa probleme.

Për të marrë detajet e lidhjes, hyni në panelin tuaj Supabase dhe krijoni një projekt të ri të bazës së të dhënave (mund ta bëni këtë direkt nga bazë të dhënash.e re(gjë që të ridrejton te asistenti). Nëse nuk keni ende një llogari, së pari do të shihni ekranin e regjistrimit; nëse keni tashmë një, do të shkoni direkt te cilësimet e projektit dhe seksioni ku mund të kontrolloni vargun e lidhjes.

Brenda faqes së projektit, në seksionin e lidhjes, do të gjeni një buton si "Lidhu" ose të ngjashme. Kur e klikoni, Supabase ju tregon disa formate të vargjeve të lidhjes (URI, parametra individualë, etj.). Kopjoni URI-n e plotë, por mos harroni se duhet zëvendëso fjalëkalimin për atë që përdorni në të vërtetë në bazën e të dhënave, meqenëse shpesh shfaqet një parazgjedhur ose një vendmbajtës.

Me këtë informacion, duhet të shkoni te skedari .env i projektit tuaj Laravel dhe të përditësoni variablat DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME dhe DB_PASSWORD, ose të konfiguroni variablin DATABASE_URL nëse preferoni të përdorni formatin e plotë të vargut. Qëllimi është që gjithçka të tregojë te Grumbulli Supabase Postgres dhe jo te localhost-i juaj.

Konfiguroni drajverin Postgres dhe skemën Supabase në Laravel

Në Laravel, skedari kryesor për konfigurimin e bazës së të dhënave është config/database.phpEdhe pse mund ta përdorni drejtpërdrejt drajverin pgsql që vjen me kornizën, kur punoni me Supabase është e zakonshme të aplikoni disa rregullime shtesë, veçanërisht në lidhje me skemat dhe opsionet specifike të Postgres.

Një konfigurim tipik për Postgres në Laravel mund të duket kështu, brenda grupit të lidhjeve, nën çelësin 'pgsql':

'pgsql' => ,

Çelësi këtu është në parametër shtegu_i_kërkimitSupabase, si parazgjedhje, përdor skemën publike, e cila është ajo që ekspozohet përmes API-ve të saj. Nëse doni ta mbani aplikacionin tuaj Laravel të ndarë nga ajo skemë dhe të shmangni konfliktet e tabelave ose politikave, rekomandohet fuqimisht të ndryshoni search_path në skemën tuaj, për shembull. laravel, siç u pa në shembullin e mëparshëm.

Në këtë mënyrë, migrimet dhe tabelat e gjeneruara nga projekti juaj do të krijohen në atë skemë alternative dhe jo në publik. Kjo ndarje e bën menaxhimin shumë më të lehtë. rregullat e sigurisë, RLS dhe qasja nga paneli Supabase pa shkelur mbi asgjë që nuk duhet dhe duke e mbajtur të organizuar strukturën e bazës së të dhënave.

  Cikli jetësor i zhvillimit të softuerit: Strategjitë për të optimizuar çdo fazë

Pasi ta keni rregulluar skedarin e konfigurimit, mund të nisni migrimet duke përdorur komandat e zakonshme të Laravel. Kjo do të krijojë tabelat e vërtetimit dhe çdo tabelë tjetër që keni përcaktuar. Nëse gjithçka është konfiguruar saktë, komandat do të ekzekutohen kundër Supabase Postgres pa pasur nevojë të bësh asgjë tjetër.

Pasi të përfundojnë migrimet, nisni serverin e zhvillimit me `artisan serve` dhe provoni të regjistroni dhe identifikoni përdoruesit. Nëse nuk shfaqen gabime lidhjeje ose migrimi, kjo do të thotë që Laravel po funksionon. duke komunikuar saktë me Supabase dhe ju mundeni vazhdoni të ndërtoni logjikën e biznesit tuaj normalisht

Duke përdorur një drajver specifik Supabase në Laravel

Edhe pse drajveri standard pgsql funksionon, ekziston një paketë që shton një drajveri i bazës së të dhënave supabase për Laravel, duke zgjeruar sjelljen e PostgreSQL me përmirësime shumë të dobishme, veçanërisht në lidhje me trajtimin e kolonave UUID dhe mënyrën se si ndërtohen pyetjet.

Ky paketë, i shpërndarë si prahsys/laravel-supabase, instalohet nëpërmjet Composer dhe regjistron një drajver shtesë të quajtur supabase që mund ta përdorni në skedarin tuaj config/database.php. Brenda, bazohet në drajverin Postgres të Laravel, por përfshin cilësimet dhe gramatikat e kërkimit optimizuar për mjedisin specifik Supabase.

Pasi të instalohet, mund të deklaroni diçka si më poshtë brenda seksioni i lidhjeve:

'connections' => ,
    // otras conexiones...
],

Avantazhi i përdorimit të këtij drajveri është se ju ende merrni të gjithë fuqinë e motorit Postgres, por ai gjithashtu trajton automatikisht disa detaje delikate të Supabase, veçanërisht kur punoni me UUID-të si çelësa parësorë ose fusha marrëdhënieshKjo shmang nevojën për të shkruar manualisht përcaktimin e versionit për çdo pyetje të ndërlikuar.

Paketa është projektuar gjithashtu për t'u përshtatur mirë me versionet moderne të framework-ut dhe PHP-së, duke ofruar përputhshmëri zyrtare me Laravel 10.x, 11.x, 12.x dhe me PHP nga versioni 8.1 e tutje, si dhe me çdo bazë të dhënash standarde PostgreSQL, duke përfshirë sigurisht Supabase.

Për t'u siguruar që gjithçka funksionon siç duhet, paketa përfshin një sërë testesh të automatizuara. Mund t'i ekzekutoni testet me komandën `composer test`, e cila do të përdorë një bazë të dhënash SQLite në memorie për shpejtësi, ose të përgatitni një skedar `.env.testing` që tregon Supabase-in tuaj dhe të ekzekutoni `composer test-supabase` për të verifikuar sjelljen në një mjedis të botës reale. Postgres i largët.

Menaxhimi i UUID në Supabase dhe Laravel

Supabase ka një veçori me kolonat UUID: nëse përpiqeni të krahasoni një UUID direkt me një varg teksti pa përdorur, pyetja mund të dështojnë ose kthejnë rezultate të paprituraNë një sistem "të thjeshtë" Postgres, ju mund ta zgjidhnit këtë me konvertime globale ose operatorë të personalizuar, por në Supabase këto personalizime globale nuk lejohen.

Kjo nënkupton sesa një hetim i drejtpërdrejtë i stilit:

SELECT *
FROM users
WHERE id = '123e4567-e89b-12d3-a456-426614174000';

Nuk do të funksionojë siç do të pritej. Megjithatë, nëse kryeni përzgjedhjen e aktorëve të qartë:

SELECT *
FROM users
WHERE CAST(id AS TEXT) = '123e4567-e89b-12d3-a456-426614174000';

Pyetja është kryer me sukses. Problemi është se në Laravel, kur shkruani pyetje me Eloquent ose me ndërtuesin e pyetjeve, nuk doni të vazhdoni. duke vendosur CAST në secilin vendKëtu hyn në lojë drajveri supabase nga paketa e lartpërmendur, i cili kujdeset për shtimin e këtyre cast-eve për ju.

Me atë drajver aktiv, mund të kryeni pyetje të zakonshme si:

$user = User::find($uuidString);
$user = User::where('id', $uuidString)->first();
$users = User::whereIn('id', )->get();

Dhe jo vetëm në konsultime të drejtpërdrejta, por edhe në bashkohetPër shembull, nëse doni të merrni postime dhe t'i bashkoni ato me tabelën e përdoruesve duke përdorur një fushë UUID, mund të bëni diçka të tillë:

$posts = Post::join('users', 'posts.user_id', '=', 'users.id')
    ->where('users.email', '[email protected]')
    ->get();

Shoferi është përgjegjës për zbatimin e kastet e nevojshme për tekstin në kolonat përkatëse UUID, në mënyrë transparente. Në këtë mënyrë, kodi juaj mbetet idiomatik për Laravel, dhe nuk keni nevojë të shkruani SQL të papërpunuar ose të përdorni truke të çuditshme në çdo pyetje komplekse.

  Python dhe bazat e të dhënave: Udhëzuesi i fundit për fillestarët

Nëse dëshironi kontroll më të imët mbi kolonat që konsiderohen UUID, paketa ofron veçorinë CastsUuidColumns për modelet tuaja Eloquent. Thjesht përdoreni atë në klasën e modelit dhe përcaktoni një varg të mbrojtur me kolona shtesë:

use Prahsys\Supabase\Traits\CastsUuidColumns;

class Post extends Model
{
    use CastsUuidColumns;

    protected $uuidColumns = ;
}

Kjo veçori bën tre gjëra të rëndësishme: përfshin çelësin primar si UUID si parazgjedhje dhe shton çdo kolonë që deklaroni në veçori. $uuidColumns dhe ia komunikon atë informacion ndërtuesit të pyetjeve në mënyrë që ai të dijë se ku t'i aplikojë konvertimet. Kështu, i gjithë aksesi në të dhëna që përfshin UUID-të bëhet konsistente dhe e automatizuar.

Për raste edhe më të avancuaraMund të regjistroni një detektor kolonash UUID të personalizuar. Duke përdorur paketën PostgresGrammar, mund të specifikoni një funksion rikthimi që, bazuar në emrin e kolonës ose kontekstin e pyetjes, vendos nëse duhet të trajtohet si UUID. Për shembull:

use Prahsys\Supabase\Database\Query\Grammars\PostgresGrammar;

PostgresGrammar::detectUuidColumnsWith(function ($columnName, $query) {
    return str_contains($columnName, 'uuid_')
        || in_array($columnName, );
});

Me këtë funksion të vendosur, sistemi mund të konsiderojë si UUID të gjitha kolonat, emri i të cilave ka një model të caktuar ose është brenda një liste specifike, duke u përshtatur me konventa shumë specifike të emërtimit të projektit tuaj.

Integroni Supabase Storage si një sistem skedarësh në Laravel

Përveç bazës së të dhënave, shumë projekte duhet të ruajnë imazhe, dokumente ose skedarë të tjerë të ngarkuar nga përdoruesit. Supabase përfshin një shërbim ruajtjeje të bazuar në kova që mund ta shfrytëzoni si Disk Laravel duke përdorur FlysystemPër këtë qëllim, ekziston një përshtatës specifik që lejon që Supabase Storage të trajtohet si një drajver tjetër brenda config/filesystems.php.

Paketa në fjalë ofron një përshtatës Flysystem që integrohet në mënyrë transparente me sistemin e ruajtjes së framework-ut. Ai përmbush kërkesat minimale të PHP >= 8.1, Laravel 10.x ose 11.x dhe zgjerimin PHP fileinfo (ext-fileinfo), të cilin Laravel e rekomandon tashmë për trajtimin e skedarëve. Instalimi bëhet me Composer, dhe pasi të përfshihet, ju vetëm duhet të përcaktoni diskun supabase në konfigurim.

Në Dosje config/filesystems.phpBrenda disqeve të vargut, do të shtonit diçka të ngjashme me sa vijon:

'supabase' => ,
    ],
    'signedUrlExpires' => 60 * 60 * 24,
],

Parametri i kovës zakonisht është thjesht emri i kovës së magazinimit që keni krijuar në panelin Supabase (për shembull, myapp-file-uploads). Pika fundore është URL-ja bazë e shërbimit të ruajtjes së projektit, e dukshme edhe në seksionin përkatës të panelit dhe zakonisht rrjedh nga URL-ja dhe rajoni i projektit.

Opsioni `public` tregon nëse përmbajtja e kovës do të trajtohet si publike si parazgjedhje. Nëse është `true`, përshtatësi do të gjenerojë URL të aksesueshme pa një nënshkrim të veçantë; nëse është `false`, hyn në lojë opsioni `defaultUrlGeneration`, i cili mund të detyrojë gjenerimin e URL-ve të nënshkruara me një kohë skadimi të specifikuar nga `signedUrlExpires`. Ky konfigurim ju lejon të balanconi ngarkesën. siguri dhe rehati varësisht nga lloji i skedarëve që trajtoni.

URL-ja e përgjithshme e diskut normalisht lihet si null në mënyrë që përshtatësi ta nxjerrë automatikisht atë nga pika fundore. Duhet ta prekni vetëm nëse po përdorni një prokurë ose CDN ndërmjetës dhe ju dëshironi që rrugët e gjeneruara të tregojnë për atë domen në vend të domenit vendas Supabase.

Zgjidh gabimet e ngarkimit dhe kuptoj çelësin e Supabase Storage

Një problem mjaft i zakonshëm kur përpiqeni të ngarkoni skedarë në Supabase Storage nga Laravel është marrja e mesazheve si "Nuk mund të shkruhet skedari në vendndodhjen: ngarkime/…"Kjo zakonisht tregon se, megjithëse drajveri është konfiguruar, Supabase po e mohon operacionin e shkrimit për shkak të lejeve të pamjaftueshme ose një çelësi të konfiguruar gabimisht.

Në diskun supabase të config/filesystems.php, konfigurimi përmend përdorimin e një "çelës i privilegjuar" në fushën e çelësit, duke deklaruar shprehimisht se një çelës vetëm për lexim nuk do të funksionojë. Kjo do të thotë që duhet të përdorni një çelës shërbimi që ka leje shkrimi në bucket, jo thjesht një çelës publik API të destinuar për klientin ose një çelës të destinuar për pajtueshmërinë S3 pa leje modifikimi.

Në panelin Supabase, brenda seksionit të konfigurimit të API-t dhe ruajtjes, do të gjeni si çelësat anonimë ashtu edhe rol_service ose ekuivalentKëto janë ato me privilegje të zgjeruara. Është ai çelës shërbimi, dhe jo ai publik, që duhet ta vendosni në variablin SUPABASE_SECRET_ACCESS_KEY, të cilin drajveri do ta lexojë më pas përmes env('SUPABASE_SECRET_ACCESS_KEY').

  Mbrojtje aktive dhe skaner i cenueshmërisë për API-të

Nëse keni qenë duke testuar me çelësin S3 nga konfigurimi i ruajtjes ose me çelësat gjenerikë të API-t nga projekti, ka shumë të ngjarë që ato kredenciale të mos kenë leje për të shkruar në kovën specifike, duke rezultuar në gabimin e shkrimit. Ndryshimi i vlerës së çelësit në një çelës shërbimi i vlefshëm me leje shkrimi Dhe duke konfirmuar që kova ekziston dhe është shkruar saktë, problemi zakonisht zgjidhet.

Përveç çelësit, është e rëndësishme të verifikohet që kova e përcaktuar në SUPABASE_STORAGE_BUCKET përputhet saktësisht me atë të krijuar në ndërfaqen Supabase, duke respektuar shkronjat e mëdha dhe të vogla, dhe që pika fundore korrespondon me URL-në e saktë për atë instancë ruajtjeje. Një detaj si një karakter shtesë ose një domen i pasaktë mund të pengojë funksionimin e përshtatësit. gjeni destinacionin e vërtetë të skedarëve.

Fluksi i punës me Laravel Breeze, Blade dhe Supabase Storage

Pasi të keni konfiguruar bazën e të dhënave dhe hapësirën e ruajtjes, hapi tjetër natyror është të integroni gjithçka me tuajën. Ndërfaqja Laravel Breeze dhe shabllonet BladeNë këtë mënyrë, përdoruesit mund të regjistrohen, autentifikojnë dhe ngarkojnë skedarë në Supabase pa dalë nga ekosistemi Laravel.

Brenda kontrolluesve tuaj, ju do të përdorni Fasada e magazinimit duke treguar diskun supabase. Për shembull, për të ngarkuar një skedar të marrë nga një formular me një input skedari, mund të bëni diçka si:

if ($request->hasFile('file')) {
    $path = $request->file('file')
        ->store('uploads', 'supabase');
}

Ky kod i tregon Laravel-it të përdorë diskun supabazë dhe vendoseni skedarin brenda dosjes virtuale të ngarkimeve brenda kovës së konfiguruar. Nëse çelësi dhe pika fundore janë të sakta, skedari do të ngarkohet në hapësirën e ruajtjes Supabase dhe ju mund të merrni rrugën e tij ose të gjeneroni URL publike ose të nënshkruara duke përdorur metoda standarde të ruajtjes.

Avantazhi i kësaj qasje është se aplikacioni juaj mirëmban një ndërfaqe të vetme për ruajtje, pavarësisht nëse po përdor diskun lokal, Amazon S3, Supabase ose një shërbim tjetër të mbështetur. Ndërrimi i ofruesve reduktohet në rregullo config/filesystems.php dhe variablat e mjedisit, pa prekur logjikën e biznesit.

Duke e kombinuar këtë me Blade dhe Breeze, ju mund të ofroni formularë ngarkimi, lista skedarësh dhe lidhje shkarkimi të integruara plotësisht në përvojën e përdoruesit të aplikacionit tuaj. Për më tepër, qasja e bazuar në politika dhe në "kovë" e Supabase Storage ju lejon të shfrytëzoni atë. kontrollet e aksesit dhe rregullat e sigurisë për të përcaktuar se çfarë mund të shohë ose shkarkojë secili përdorues.

I gjithë ky ekosistem paketash, drajverësh dhe konfigurimesh i lejon Laravel të punojë shumë rehat me Supabase, si në aspektin e të dhënave relacionale me Postgres ashtu edhe në... ruajtja e skedarëve dhe menaxhimi i UUID-itDuke rregulluar siç duhet çelësat, skemat dhe drajverët, ju arrini një integrim shumë të fortë që shmang shumë nga gabimet tipike që ndodhin kur përpiqeni të lidhni të dy platformat manualisht dhe pa këto shtresa ndihme.

Lidhja e Laravel me Supabase për bazën e të dhënave dhe ruajtjen e të dhënave, shfrytëzimi i drajverit të dedikuar Supabase për të menaxhuar UUID-të pa probleme, dhe përdorimi i adaptorit Flysystem për ruajtjen e të dhënave ju lejon të ndërtoni aplikacione moderne ku E gjithë infrastruktura komplekse është e përfshirë Prapa skenave të API-t të pastër të Laravel, nga migrimet dhe autentifikimi deri te ngarkimi i skedarëve në "kofa të sigurta".

direktiva blade hastack në laravel
Artikuj të ngjashëm:
Direktiva Blade hasStack në Laravel dhe kontroll i avancuar i stack-ut