- Konfiguriranje Laravela za korištenje Supabase Postgres baze podataka uključuje ispravno podešavanje upravljačkog programa, sheme i varijabli okruženja.
- Supabaseov specifični upravljački program za Laravel automatski rješava uobičajene probleme s UUID stupcima u upitima i spajanjima.
- Flysystem adapter vam omogućuje da tretirate Supabase Storage kao još jedan Laravel disk, jednostavno integrirajući prijenos datoteka.
- Korištenje privilegiranih servisnih ključeva i dobro konfiguriranih spremnika ključno je za izbjegavanje pogrešaka pri pisanju i osiguravanje stabilnog toka.
Ako radite s Laravelom i posvećeni ste pozadinsko programiranje i osjećaš se kao da želiš skočiti u bazu podataka moderni, upravljani PostgreSQL poput SupabaseaVjerojatno ste primijetili da nije dovoljno samo promijeniti nekoliko varijabli u .env datoteci. Postoje detalji povezivanja, sheme, autentifikacija i pohrana datoteka koji, ako se zanemare, mogu dovesti do nekih prilično zagonetnih pogrešaka.
Nadalje, kada želite ići korak dalje i koristiti Supabase kao pohrana datoteka Kada se integrira s Laravelovim sustavom za pohranu, stvari postaju malo složenije: servisni ključevi, spremnike, krajnje točke, prilagođeni Flysystem upravljački programi itd. Dobra vijest je da se sve - baza podataka, pohrana i rukovanje UUID-om - može savršeno integrirati na prilično čist način.
Povezivanje Laravela sa Supabase bazom podataka
Prvi korak je imati funkcionalan Laravel projekt i povezati ga s Postgres bazom podataka koju pruža Supabase. Za to vam je potrebno okruženje s PHP i Composer ažurirani i stvorite novi projekt ili upotrijebite postojeći. Iz konzole jednostavno generirajte projekt tipičnom Laravel naredbom, a zatim počnite postavljati vezu.
Nakon što imate kostur projekta, uobičajeni korak je instaliranje jednostavnog sustava za autentifikaciju. Laravel Breeze se vrlo dobro uklapa jer uključuje Predlošci oštrica i osnovni postupak prijave i registracijeTo vam omogućuje brzu provjeru je li veza s bazom podataka ispravno konfigurirana i možete li bez problema stvarati korisnike.
Za dobivanje detalja veze, prijavite se na Supabase panel i stvorite novi projekt baze podataka (to možete učiniti izravno iz baza podataka.nova(što preusmjerava na čarobnjaka). Ako još nemate račun, prvo ćete vidjeti zaslon za registraciju; ako ga već imate, otići ćete izravno na postavke projekta i odjeljak gdje možete provjeriti niz za povezivanje.
Unutar stranice projekta, u odjeljku za povezivanje, naći ćete gumb poput "Connect" ili slično. Kada kliknete na njega, Supabase vam prikazuje nekoliko formata niza za povezivanje (URI, pojedinačni parametri itd.). Kopirajte cijeli URI, ali imajte na umu da morate zamijeni lozinku za onu koju zapravo koristite u bazi podataka, budući da se često prikazuje zadana ili rezervirano mjesto.
S tim informacijama, trebate otići u .env datoteku svog Laravel projekta i ažurirati varijable DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME i DB_PASSWORD ili konfigurirati varijablu DATABASE_URL ako želite koristiti format punog niza znakova. Cilj je da sve pokazuje na Supabase Postgres klaster a ne vašem lokalnom hostu.
Konfigurirajte Postgres upravljački program i Supabase shemu u Laravelu
U Laravelu, ključna datoteka za konfiguraciju baze podataka je config/database.phpIako možete izravno koristiti pgsql upravljački program koji dolazi s frameworkom, pri radu sa Supabaseom uobičajeno je primijeniti neke dodatne prilagodbe, posebno u vezi sa shemama i opcijama specifičnim za Postgres.
Tipična konfiguracija za Postgres u Laravelu mogla bi izgledati ovako, unutar niza connections, pod ključem 'pgsql':
'pgsql' => ,
Ključ ovdje je u parametru put_pretraživanjaSupabase, prema zadanim postavkama, koristi javnu shemu, onu koja je izložena putem svojih API-ja. Ako želite da vaša Laravel aplikacija bude odvojena od te sheme i da izbjegnete sukobe tablica ili pravila, preporučuje se da, na primjer, promijenite search_path u vlastitu shemu. laravel, kao što se vidi u prethodnom primjeru.
Na taj će se način migracije i tablice generirane vašim projektom stvarati u toj alternativnoj shemi, a ne javno. Ova odvojenost znatno olakšava upravljanje. sigurnosna pravila, RLS i pristup iz Supabase panela bez gaženja ni na što ne biste trebali i uz održavanje organiziranosti strukture baze podataka.
Nakon što ste prilagodili konfiguracijsku datoteku, možete pokrenuti migracije pomoću uobičajenih Laravel naredbi. To će stvoriti tablice za autentifikaciju i sve ostale tablice koje ste definirali. Ako je sve ispravno konfigurirano, naredbe će se izvršavati protiv Supabase Postgres bez da morate učiniti išta drugo.
Nakon što su migracije dovršene, pokrenite razvojni poslužitelj s `artisan serve` i pokušajte registrirati i prijaviti korisnike. Ako se ne pojave greške u povezivanju ili migraciji, to znači da Laravel radi. ispravna komunikacija sa Supabaseom a ti možeš nastavite graditi svoju poslovnu logiku normalno, redovno.
Korištenje specifičnog Supabase drajvera u Laravelu
Iako standardni pgsql upravljački program radi, postoji paket koji dodaje upravljački program baze podataka supabase za Laravel, proširujući ponašanje PostgreSQL-a vrlo korisnim poboljšanjima, posebno u pogledu rukovanja UUID stupcima i načina na koji se upiti konstruiraju.
Ovaj paket, distribuiran kao prahsys/laravel-supabase, instalira se putem Composera i registrira dodatni upravljački program pod nazivom supabase koji možete koristiti u svojoj datoteci config/database.php. Interno se temelji na Laravelovom Postgres upravljačkom programu, ali uključuje postavke i gramatike pretraživanja optimizirano za specifično Supabase okruženje.
Nakon instalacije, možete deklarirati nešto poput sljedećeg unutar odjeljak za veze:
'connections' => ,
// otras conexiones...
],
Prednost korištenja ovog upravljačkog programa je u tome što i dalje dobivate svu snagu Postgres engine-a, ali on također automatski obrađuje određene osjetljive detalje Supabase-a, posebno pri radu s UUID-ovi kao primarni ključevi ili polja odnosaTime se izbjegava ručno pisanje preoblikovanja za svaki složeni upit.
Paket je također dizajniran da se dobro uklapa s modernim verzijama frameworka i PHP-a, nudeći službenu kompatibilnost s Laravel 10.x, 11.x, 12.x i s PHP-om od verzije 8.1 nadalje, kao i s bilo kojom standardnom PostgreSQL bazom podataka, uključujući naravno Supabase.
Kako bi se osiguralo da sve ispravno radi, paket uključuje skup automatiziranih testova. Testove možete pokrenuti naredbom `composer test`, koja će koristiti SQLite bazu podataka u memoriji radi brzine, ili pripremiti datoteku `.env.testing` koja upućuje na vašu Supabase i pokrenuti `composer test-supabase` kako biste provjerili ponašanje u stvarnom okruženju. Udaljeni Postgres.
Upravljanje UUID-ovima u Supabaseu i Laravelu
Supabase ima osobitost s UUID stupcima: ako pokušate izravno usporediti UUID s tekstualnim nizom bez pretvaranja, upit može ne uspije ili vrati neočekivane rezultateU "običnom" Postgres sustavu to biste mogli riješiti globalnim pretvaranjima ili prilagođenim operatorima, ali u Supabaseu te globalne prilagodbe nisu dopuštene.
Iz čega slijedi nego izravno ispitivanje stila:
SELECT *
FROM users
WHERE id = '123e4567-e89b-12d3-a456-426614174000';
Neće uspjeti kao što biste i očekivali. Međutim, ako provedete eksplicitno pretvaranje:
SELECT *
FROM users
WHERE CAST(id AS TEXT) = '123e4567-e89b-12d3-a456-426614174000';
Upit je uspješan. Problem je što u Laravelu, kada pišete upite s Eloquentom ili alatom za izradu upita, ne želite ići stavljanje CAST-a u svaki whereTu na scenu stupa supabase driver iz spomenutog paketa, koji se brine o dodavanju tih pretvaranja umjesto vas.
S tim aktivnim upravljačkim programom možete izvršiti uobičajeni upiti kao:
$user = User::find($uuidString);
$user = User::where('id', $uuidString)->first();
$users = User::whereIn('id', )->get();
I ne samo u izravnim konzultacijama, već i u pridružujeNa primjer, ako želite dohvatiti objave i spojiti ih s tablicom korisnika pomoću UUID polja, mogli biste učiniti nešto poput ovoga:
$posts = Post::join('users', 'posts.user_id', '=', 'users.id')
->where('users.email', '[email protected]')
->get();
Vozač je odgovoran za primjenu potrebni glumci za tekst u relevantnim UUID stupcima, transparentno. Na taj način vaš kod ostaje idiomatski za Laravel i ne morate pisati sirovi SQL ili koristiti čudne trikove u svakom složenom upitu.
Ako želite precizniju kontrolu nad time koji se stupci smatraju UUID-ovima, paket nudi značajku CastsUuidColumns za vaše Eloquent modele. Jednostavno ga upotrijebite u klasi modela i definirajte zaštićeni niz dodatnih stupaca:
use Prahsys\Supabase\Traits\CastsUuidColumns;
class Post extends Model
{
use CastsUuidColumns;
protected $uuidColumns = ;
}
Ova osobina radi tri važne stvari: prema zadanim postavkama uključuje primarni ključ kao UUID i dodaje bilo koji stupac koji deklarirate u svojstvu. $uuidColumns i prenosi te informacije alatu za izradu upita kako bi znao gdje primijeniti pretvaranja. Stoga sav pristup podacima koji uključuje UUID-ove postaje dosljedan i automatiziran.
Za još naprednije slučajeveMožete registrirati prilagođeni UUID detektor stupaca. Pomoću paketa PostgresGrammar možete odrediti funkciju povratnog poziva koja, na temelju naziva stupca ili konteksta upita, odlučuje treba li ga tretirati kao UUID. Na primjer:
use Prahsys\Supabase\Database\Query\Grammars\PostgresGrammar;
PostgresGrammar::detectUuidColumnsWith(function ($columnName, $query) {
return str_contains($columnName, 'uuid_')
|| in_array($columnName, );
});
S ovom funkcijom uspostavljenom, sustav može smatrati UUID-ovima sve stupce čije ime ima određeni uzorak ili se nalazi unutar određenog popisa, prilagođavajući se vrlo specifične konvencije imenovanja vašeg projekta.
Integrirajte Supabase Storage kao datotečni sustav u Laravel
Osim baze podataka, mnogi projekti trebaju pohranjivati slike, dokumente ili druge datoteke koje su korisnici prenijeli. Supabase uključuje uslugu pohrane temeljenu na kontejnerima koju možete koristiti kao Laravel disk pomoću FlysystemaU tu svrhu postoji poseban adapter koji omogućuje da se Supabase Storage tretira kao još jedan upravljački program unutar config/filesystems.php.
Predmetni paket pruža Flysystem adapter koji se transparentno integrira sa sustavom za pohranu okvira. Ispunjava minimalne zahtjeve PHP >= 8.1, Laravel 10.x ili 11.x i PHP fileinfo ekstenziju (ext-fileinfo), koju Laravel već preporučuje za rukovanje datotekama. Instalacija se vrši pomoću Composera, a nakon što je uključen, potrebno je samo definirati supabase disk u konfiguraciji.
U datoteci config/filesystems.phpUnutar polja diskova, dodali biste nešto slično sljedećem:
'supabase' => ,
],
'signedUrlExpires' => 60 * 60 * 24,
],
Parametar spremnika je obično jednostavno naziv spremnika za pohranu koje ste kreirali u Supabase panelu (na primjer, myapp-file-uploads). Krajnja točka je osnovni URL usluge pohrane projekta, također vidljiv u odgovarajućem odjeljku panela i obično je izveden iz URL-a i regije projekta.
Opcija `public` označava hoće li se sadržaj spremnika prema zadanim postavkama tretirati kao javni. Ako je `true`, adapter će generirati dostupne URL-ove bez posebnog potpisa; ako je `false`, u igru stupa opcija `defaultUrlGeneration` koja može prisiliti generiranje potpisanih URL-ova s vremenom isteka određenim u `signedUrlExpires`. Ova konfiguracija omogućuje vam uravnoteženje opterećenja. sigurnost i udobnost ovisno o vrsti datoteka s kojima rukujete.
Opći URL diska obično se ostavlja kao null kako bi ga adapter automatski izvodio iz krajnje točke. Trebali biste ga dirati samo ako koristite proxy ili posrednički CDN i želite da generirane rute pokazuju na tu domenu umjesto na izvornu Supabase domenu.
Rješavanje problema s pogreškama pri prijenosu i razumijevanje ključa Supabase Storagea
Prilično čest problem pri pokušaju prijenosa datoteka na Supabase Storage iz Laravela je primanje poruka poput „Nije moguće zapisati datoteku na lokaciji: uploads/…“To obično ukazuje na to da, iako je upravljački program konfiguriran, Supabase odbija operaciju pisanja zbog nedovoljnih dozvola ili pogrešno konfiguriranog ključa.
U supabase disku config/filesystems.php, konfiguracija spominje korištenje "privilegirani ključ" u polju ključa, izričito navodeći da ključ samo za čitanje neće raditi. To znači da morate koristiti servisni ključ koji ima dopuštenja za pisanje na spremniku, a ne samo javni API ključ namijenjen klijentu ili ključ namijenjen za S3 kompatibilnost bez dopuštenja za izmjenu.
U Supabase panelu, unutar odjeljka za konfiguraciju API-ja i pohrane, pronaći ćete i anonimne ključeve i uloga_usluge ili ekvivalentTo su oni s proširenim privilegijama. Upravo taj servisni ključ, a ne javni, trebate smjestiti u varijablu SUPABASE_SECRET_ACCESS_KEY, koju će upravljački program zatim pročitati putem env('SUPABASE_SECRET_ACCESS_KEY').
Ako ste testirali s S3 ključem iz konfiguracije pohrane ili s generičkim API ključevima iz projekta, vrlo je vjerojatno da te vjerodajnice nemaju dopuštenje za pisanje u određeni spremnik, što rezultira pogreškom pisanja. Promjena vrijednosti ključa u valjani servisni ključ s dopuštenjima za pisanje A potvrdom da kanta postoji i da je ispravno napisana, problem je obično riješen.
Uz ključ, važno je provjeriti da se spremnik definiran u SUPABASE_STORAGE_BUCKET točno podudara s onim kreiranim u Supabase sučelju, poštujući velika i mala slova, te da krajnja točka odgovara ispravnom URL-u za tu instancu pohrane. Detalj poput dodatnog znaka ili netočne domene može spriječiti rad adaptera. locirati stvarno odredište datoteka.
Tijek rada s Laravel Breeze, Blade i Supabase Storageom
Nakon što postavite bazu podataka i pohranu, sljedeći prirodni korak je integracija svega s vašim Laravel Breeze sučelje i Blade predlošciNa ovaj način, korisnici se mogu registrirati, autentificirati i prenositi datoteke na Supabase bez napuštanja Laravel ekosustava.
Unutar vaših kontrolera koristili biste Fasada skladišta pokazujući na supabase disk. Na primjer, za prijenos datoteke primljene iz obrasca s ulaznom datotekom, mogli biste učiniti nešto poput:
if ($request->hasFile('file')) {
$path = $request->file('file')
->store('uploads', 'supabase');
}
Ovaj kod govori Laravelu da koristi disk supabaza i smjestite datoteku u mapu virtualnih prijenosa unutar konfiguriranog spremnika. Ako su ključ i krajnja točka ispravni, datoteka će se prenijeti u Supabase pohranu, a vi možete dohvatiti njezinu putanju ili generirati javne ili potpisane URL-ove pomoću standardnih metoda pohrane.
Prednost ovog pristupa je u tome što vaša aplikacija održava jedno sučelje za pohranu, bez obzira koristi li lokalni disk, Amazon S3, Supabase ili neku drugu podržanu uslugu. Promjena pružatelja usluga svodi se na prilagodite config/filesystems.php i varijable okruženja, bez diranja poslovne logike.
Kombiniranjem ovoga s Bladeom i Breezeom, možete ponuditi obrasce za prijenos, popise datoteka i poveznice za preuzimanje potpuno integrirane u korisničko iskustvo vaše aplikacije. Nadalje, pristup Supabase Storagea temeljen na skupinama podataka i pravilima omogućuje vam da iskoristite njegove kontrole pristupa i sigurnosna pravila definirati što svaki korisnik može vidjeti ili preuzeti.
Cijeli ovaj ekosustav paketa, upravljačkih programa i konfiguracija omogućuje Laravelu vrlo ugodan rad sa Supabaseom, kako u aspektu relacijskih podataka s Postgresom tako i u... pohrana datoteka i upravljanje UUID-ovimaPravilnim podešavanjem ključeva, shema i upravljačkih programa postiže se vrlo solidna integracija koja izbjegava mnoge tipične pogreške koje se javljaju pri pokušaju ručnog povezivanja obje platforme i bez ovih slojeva pomoći.
Povezivanje Laravela sa Supabaseom za bazu podataka i pohranu, korištenje namjenskog Supabase upravljačkog programa za besprijekorno upravljanje UUID-ovima i korištenje Flysystem adaptera za pohranu omogućuje vam izgradnju modernih aplikacija gdje Cijela kompleksna infrastruktura je zatvorena Iza kulisa čistog Laravelovog API-ja, od migracija i autentifikacije do prijenosa datoteka u sigurne buckete.