- „Laravel“ konfigūravimas naudoti „Supabase Postgres“ duomenų bazę apima teisingą tvarkyklės, schemos ir aplinkos kintamųjų koregavimą.
- Speciali „Supabase“ tvarkyklė, skirta „Laravel“, automatiškai išsprendžia dažniausiai pasitaikančias UUID stulpelių problemas užklausose ir sujungimuose.
- „Flysystem“ adapteris leidžia laikyti „Supabase Storage“ tiesiog dar vienu „Laravel“ disku, lengvai integruojant failų įkėlimą.
- Privilegijuotų paslaugų raktų ir gerai sukonfigūruotų saugyklų naudojimas yra labai svarbus norint išvengti rašymo klaidų ir užtikrinti stabilų srautą.
Jei dirbate su „Laravel“ ir esate tam atsidavę vidinės dalies programavimas ir norite pereiti prie duomenų bazės Tvarkomas ir modernus PostgreSQL, panašus į „Supabase“Tikriausiai pastebėjote, kad nepakanka pakeisti tik porą kintamųjų .env faile. Yra ryšio detalių, schemų, autentifikavimo ir failų saugojimo, kurių nepaisymas gali sukelti gana paslaptingų klaidų.
Be to, kai norite žengti dar vieną žingsnį ir naudoti „Supabase“ kaip failų saugykla Integravus su „Laravel“ saugojimo sistema, viskas tampa šiek tiek sudėtingiau: paslaugų raktai, saugyklos, galiniai taškai, pasirinktiniai „Flysystem“ tvarkyklės ir kt. Geros žinios yra tai, kad viską – duomenų bazę, saugyklą ir UUID apdorojimą – galima puikiai integruoti gana švariu būdu.
„Laravel“ prijungimas prie „Supabase“ duomenų bazės
Pirmas žingsnis – sukurti veikiantį „Laravel“ projektą ir susieti jį su „Supabase“ teikiama „Postgres“ duomenų baze. Tam reikia aplinkos su PHP ir Composer atnaujintas ir sukurkite naują projektą arba naudokite esamą. Konsolėje tiesiog sugeneruokite projektą naudodami įprastą „Laravel“ komandą ir pradėkite ryšio nustatymą.
Kai turėsite projekto karkasą, įprastas žingsnis yra įdiegti paprastą autentifikavimo sistemą. „Laravel Breeze“ puikiai tinka, nes joje yra Peilių šablonai ir pagrindinis prisijungimo ir registracijos procesasTai leidžia greitai patikrinti, ar jūsų duomenų bazės ryšys tinkamai sukonfigūruotas ir ar galite be problemų kurti vartotojus.
Norėdami gauti ryšio informaciją, prisijunkite prie „Supabase“ skydelio ir sukurkite naują duomenų bazės projektą (tai galite padaryti tiesiogiai iš duomenų bazė.nauja(kuris nukreipia į vedlį). Jei dar neturite paskyros, pirmiausia pamatysite registracijos ekraną; jei jau turite, pateksite tiesiai į projekto nustatymus ir skyrių, kuriame galėsite patikrinti ryšio eilutę.
Projekto puslapyje, ryšio skiltyje, rasite mygtuką, pvz. "Connect" arba panašiai. Paspaudus „Supabase“ parodys kelis prisijungimo eilutės formatus (URI, atskirus parametrus ir kt.). Nukopijuokite visą URI, bet nepamirškite, kad turite pakeisti slaptažodį tam, kurį iš tikrųjų naudojate duomenų bazėje, nes dažnai rodomas numatytasis arba vietos rezervavimo ženklas.
Turėdami šią informaciją, turite eiti į savo „Laravel“ projekto .env failą ir atnaujinti kintamuosius DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME ir DB_PASSWORD arba sukonfigūruoti kintamąjį DATABASE_URL, jei norite naudoti visą eilutės formatą. Tikslas yra, kad viskas rodytų į „Supabase Postgres“ klasteris o ne į jūsų vietinį serverį.
Konfigūruokite „Postgres“ tvarkyklę ir „Supabase“ schemą „Laravel“
„Laravel“ kalboje pagrindinis duomenų bazės konfigūracijos failas yra config/duomenų bazė.phpNors galite tiesiogiai naudoti „pgsql“ tvarkyklę, kuri pateikiama kartu su sistema, dirbant su „Supabase“ įprasta atlikti papildomus pakeitimus, ypač susijusius su schemomis ir „Postgres“ būdingomis parinktimis.
Tipinė „Postgres“ konfigūracija „Laravel“ kalboje gali atrodyti taip, jungčių masyve, po raktu „pgsql“:
'pgsql' => ,
Svarbiausia čia slypi parametre paieškos_kelias„Supabase“ pagal numatytuosius nustatymus naudoja viešąją schemą, kuri yra ta, kuri pateikiama per jos API. Jei norite, kad jūsų „Laravel“ programa būtų atskirta nuo tos schemos ir išvengtumėte lentelių ar politikos konfliktų, labai rekomenduojama, pavyzdžiui, pakeisti „search_path“ į savo schemą. laravelis, kaip matyti ankstesniame pavyzdyje.
Tokiu būdu jūsų projekto sugeneruotos migracijos ir lentelės bus kuriamos toje alternatyvioje schemoje, o ne viešai. Toks atskyrimas labai palengvina valdymą. saugumo taisyklės, RLS ir prieiga iš „Supabase“ skydelio neužlipant ant nieko, ant ko nereikėtų užlipti, ir išlaikant tvarkingą duomenų bazės struktūrą.
Sureguliavus konfigūracijos failą, galite paleisti migracijas naudodami įprastas „Laravel“ komandas. Tai sukurs autentifikavimo lenteles ir visas kitas jūsų apibrėžtas lenteles. Jei viskas sukonfigūruota teisingai, komandos veiks pagal Supabase Postgres jums nereikės nieko daugiau daryti.
Baigus migraciją, paleiskite kūrimo serverį naudodami komandą „artisan serve“ ir pabandykite užregistruoti bei prisijungti vartotojus. Jei nerodoma jokių ryšio ar migracijos klaidų, tai reiškia, kad „Laravel“ veikia. teisingas bendravimas su „Supabase“ ir tu gali toliau plėtoti savo verslo logiką paprastai.
Naudojant specialų „Supabase“ tvarkyklę „Laravel“ sistemoje
Nors standartinė „pgsql“ tvarkyklė veikia, yra paketas, kuris prideda „Supabase“ duomenų bazės tvarkyklė, skirta „Laravel“, išplėsdamas PostgreSQL elgseną su labai naudingais patobulinimais, ypač susijusiais su UUID stulpelių tvarkymu ir užklausų konstravimo būdu.
Šis paketas, platinamas kaip „prahsys/laravel-supabase“, įdiegiamas naudojant „Composer“ ir užregistruoja papildomą tvarkyklę, vadinamą „supabase“, kurią galite naudoti savo config/database.php faile. Viduje jis pagrįstas „Laravel“ „Postgres“ tvarkykle, tačiau jame yra nustatymai ir paieškos gramatikos optimizuota konkrečiai „Supabase“ aplinkai.
Įdiegę galite deklaruoti kažką panašaus į tai jungčių skyrius:
'connections' => ,
// otras conexiones...
],
Šios tvarkyklės naudojimo privalumas yra tas, kad vis tiek gaunate visą „Postgres“ variklio galią, tačiau ji taip pat automatiškai tvarko tam tikras subtilias „Supabase“ detales, ypač dirbant su UUID kaip pirminiai raktai arba ryšių laukaiTaip išvengiama būtinybės rankiniu būdu rašyti perdavimą kiekvienai sudėtingai užklausai.
Paketas taip pat sukurtas taip, kad gerai veiktų su šiuolaikinėmis sistemos ir PHP versijomis, siūlydamas oficialų suderinamumą su Laravel 10.x, 11.x, 12.x ir su PHP nuo 8.1 versijos, taip pat su bet kuria standartine PostgreSQL duomenų baze, įskaitant, žinoma, „Supabase“.
Siekiant užtikrinti, kad viskas veiktų tinkamai, pakete yra automatizuotų testų rinkinys. Testus galite paleisti naudodami komandą „composer test“, kuri greičiui padidinti naudos atmintyje esančią SQLite duomenų bazę, arba galite paruošti failą „.env.testing“, nukreipiantį į jūsų „Supabase“, ir paleisti komandą „composer test-supabase“, kad patikrintumėte veikimą realioje aplinkoje. Nuotolinis Postgres.
UUID valdymas „Supabase“ ir „Laravel“
„Supabase“ turi ypatybę su UUID stulpeliais: jei bandysite palyginti UUID tiesiogiai su teksto eilute be konvertavimo, užklausa gali... nepavyksta arba pateikiami netikėti rezultatai„Paprastoje“ „Postgres“ sistemoje tai galima išspręsti naudojant globalius perrašymus arba pasirinktinius operatorius, tačiau „Supabase“ sistemoje šie globalūs pritaikymai neleidžiami.
Tai reiškia nei tiesioginis stiliaus tyrimas:
SELECT *
FROM users
WHERE id = '123e4567-e89b-12d3-a456-426614174000';
Tai neveiks kaip ir tikėtumėtės. Tačiau jei atliksite atvirą aktorių atranką:
SELECT *
FROM users
WHERE CAST(id AS TEXT) = '123e4567-e89b-12d3-a456-426614174000';
Užklausa sėkminga. Problema ta, kad „Laravel“ sistemoje, rašant užklausas naudojant „Eloquent“ arba užklausų kūrimo priemonę, nenorima eiti toliau. įterpiant CAST kiekvienoje vietojeČia ir praverčia minėto paketo „supabase“ tvarkyklė, kuri pasirūpina šių modifikacijų pridėjimu už jus.
Kai aktyvus tas tvarkyklės tvarkyklė, galite atlikti bendrų užklausų kaip:
$user = User::find($uuidString);
$user = User::where('id', $uuidString)->first();
$users = User::whereIn('id', )->get();
Ir ne tik tiesioginėse konsultacijose, bet ir prisijungiaPavyzdžiui, jei norite gauti įrašus ir sujungti juos su naudotojų lentele naudodami UUID lauką, galite atlikti tokius veiksmus:
$posts = Post::join('users', 'posts.user_id', '=', 'users.id')
->where('users.email', '[email protected]')
->get();
Vairuotojas yra atsakingas už taikymą teksto siuntimui reikalingi elementai atitinkamuose UUID stulpeliuose, skaidriai. Tokiu būdu jūsų kodas išlieka idiomatiškas „Laravel“ ir jums nereikės rašyti neapdoroto SQL ar naudoti keistų gudrybių kiekvienoje sudėtingoje užklausoje.
Jei norite tiksliau kontroliuoti, kurie stulpeliai laikomi UUID, paketas siūlo šią savybę CastsUuidColumns savo „Eloquent“ modeliams. Tiesiog naudokite jį modelių klasėje ir apibrėžkite apsaugotą papildomų stulpelių masyvą:
use Prahsys\Supabase\Traits\CastsUuidColumns;
class Post extends Model
{
use CastsUuidColumns;
protected $uuidColumns = ;
}
Ši savybė atlieka tris svarbius dalykus: pagal numatytuosius nustatymus ji įtraukia pirminį raktą kaip UUID ir prideda bet kurį stulpelį, kurį deklaruojate savybėje. $uuidColumns ir perduoda šią informaciją užklausų kūrimo priemonei, kad ji žinotų, kur taikyti modifikacijas. Taigi, visa prieiga prie duomenų, susijusi su UUID, tampa nuoseklus ir automatizuotas.
Dar sudėtingesniems atvejamsGalite užregistruoti pasirinktinį UUID stulpelių detektorių. Naudodami „PostgresGrammar“ paketą, galite nurodyti grįžtamojo ryšio funkciją, kuri, remdamasi stulpelio pavadinimu arba užklausos kontekstu, nusprendžia, ar jis turėtų būti laikomas UUID. Pavyzdžiui:
use Prahsys\Supabase\Database\Query\Grammars\PostgresGrammar;
PostgresGrammar::detectUuidColumnsWith(function ($columnName, $query) {
return str_contains($columnName, 'uuid_')
|| in_array($columnName, );
});
Įdiegus šią funkciją, sistema gali laikyti UUID visus stulpelius, kurių pavadinimas turi tam tikrą šabloną arba yra konkrečiame sąraše, prisitaikydama prie labai specifinės pavadinimų konvencijos jūsų projekto.
Integruokite „Supabase Storage“ kaip failų sistemą „Laravel“
Be duomenų bazės, daugelyje projektų reikia saugoti vaizdus, dokumentus ar kitus vartotojų įkeltus failus. „Supabase“ apima saugyklos paslaugą, pagrįstą kibirais, kurią galite naudoti kaip „Laravel“ diskas naudojant „Flysystem“Šiuo tikslu yra specialus adapteris, leidžiantis „Supabase Storage“ laikyti tiesiog dar viena tvarkykle config/filesystems.php faile.
Aptariamas paketas pateikia „Flysystem“ adapterį, kuris skaidriai integruojasi su platformos saugojimo sistema. Jis atitinka minimalius reikalavimus, keliamus pagal PHP >= 8.1, Laravel 10.x arba 11.x ir PHP „fileinfo“ plėtinį („ext-fileinfo“), kurį „Laravel“ jau rekomenduoja failams tvarkyti. Diegimas atliekamas naudojant „Composer“, o įtraukus jį, konfigūracijoje tereikia apibrėžti „supabase“ diską.
Byloje config/failų sistemos.phpMasyvo diskuose pridėtumėte kažką panašaus į šį:
'supabase' => ,
],
'signedUrlExpires' => 60 * 60 * 24,
],
Kaušo parametras paprastai yra tiesiog saugyklos talpyklos pavadinimas kurį sukūrėte „Supabase“ skydelyje (pvz., „myapp-file-uploads“). Galinis taškas yra projekto saugojimo paslaugos bazinis URL, taip pat matomas atitinkamame skydelio skyriuje ir paprastai gaunamas iš projekto URL ir regiono.
Parinktis „public“ nurodo, ar talpyklos turinys pagal numatytuosius nustatymus bus laikomas viešu. Jei „true“, adapteris generuos prieinamus URL be specialaus parašo; jei „false“, įsijungia parinktis „defaultUrlGeneration“, kuri gali priverstinai generuoti pasirašytus URL su galiojimo laiku, nurodytu parametru „signedUrlExpires“. Ši konfigūracija leidžia subalansuoti apkrovą. saugumas ir komfortas priklausomai nuo tvarkomų failų tipo.
Bendras disko URL paprastai paliekamas kaip nulinis, kad adapteris jį automatiškai gautų iš galinio taško. Jį turėtumėte liesti tik tuo atveju, jei naudojate tarpinis arba tarpinis CDN ir norite, kad sugeneruoti maršrutai nukreiptų į tą domeną, o ne į vietinį „Supabase“ domeną.
Įkėlimo klaidų šalinimas ir „Supabase Storage“ esmės supratimas
Gana dažna problema bandant įkelti failus į „Supabase Storage“ iš „Laravel“ yra gaunami pranešimai, tokie kaip „Nepavyko įrašyti failo šioje vietoje: įkėlimai /…“Tai paprastai rodo, kad nors tvarkyklė sukonfigūruota, „Supabase“ neleidžia rašyti dėl nepakankamų leidimų arba neteisingai sukonfigūruoto rakto.
„config/filesystems.php“ failo „supabase“ diske konfigūracijoje minima naudoti „privilegijuotas raktas“ rakto lauke, aiškiai nurodant, kad tik skaitymui skirtas raktas neveiks. Tai reiškia, kad reikia naudoti paslaugos raktą, turintį rašymo teises į saugyklą, o ne tiesiog viešąjį API raktą, skirtą klientui, arba raktą, skirtą S3 suderinamumui be modifikavimo teisių.
„Supabase“ skydelyje, API ir saugyklos konfigūracijos skyriuje, rasite ir anoniminius raktus, ir paslaugos_rolė arba lygiavertisTai yra tie, kurie turi išplėstines teises. Būtent tą paslaugos raktą, o ne viešąjį, turėtumėte įdėti į kintamąjį SUPABASE_SECRET_ACCESS_KEY, kurį tvarkyklė tada nuskaitys per env('SUPABASE_SECRET_ACCESS_KEY').
Jei testavote naudodami S3 raktą iš saugyklos konfigūracijos arba bendrinius API raktus iš projekto, labai tikėtina, kad šie kredencialai neturi leidimo rašyti į konkretų saugyklos segmentą, todėl įvyko rašymo klaida. Pakeitus rakto reikšmę į galiojantis paslaugos raktas su rašymo leidimais Patvirtinus, kad kibiras egzistuoja ir yra teisingai parašytas, problema paprastai išsprendžiama.
Be rakto, svarbu patikrinti, ar SUPABASE_STORAGE_BUCKET apibrėžtas talpyklos tipas tiksliai atitinka „Supabase“ sąsajoje sukurtą talpyklos tipą, atsižvelgiant į didžiąsias ir mažąsias raides, ir ar galinis taškas atitinka teisingą to saugojimo egzemplioriaus URL. Tokia detalė kaip papildomas simbolis ar neteisingas domenas gali neleisti adapteriui veikti. suraskite tikrąją failų paskirties vietą.
Darbo eiga su „Laravel Breeze“, „Blade“ ir „Supabase Storage“
Kai nustatysite duomenų bazę ir saugyklą, kitas natūralus žingsnis – viską integruoti su savo „Laravel Breeze“ sąsaja ir „Blade“ šablonaiTokiu būdu vartotojai gali registruotis, autentifikuotis ir įkelti failus į „Supabase“ neišeidami iš „Laravel“ ekosistemos.
Savo valdikliuose naudotumėte Sandėliavimo fasadas nukreipia į „supabase“ diską. Pavyzdžiui, norėdami įkelti iš formos gautą failą su failo įvestimi, galite atlikti tokius veiksmus:
if ($request->hasFile('file')) {
$path = $request->file('file')
->store('uploads', 'supabase');
}
Šis kodas nurodo „Laravel“ naudoti diską supabazė ir įkelkite failą į virtualų įkėlimų aplanką sukonfigūruotame saugyklos skyriuje. Jei raktas ir galinis taškas teisingi, failas bus įkeltas į „Supabase“ saugyklą ir galėsite gauti jo kelią arba sugeneruoti viešus arba pasirašytus URL naudodami standartinius saugojimo metodus.
Šio metodo privalumas yra tas, kad jūsų programa palaiko vieną saugojimo sąsają, nepriklausomai nuo to, ar ji naudoja vietinį diską, „Amazon S3“, „Supabase“ ar kitą palaikomą paslaugą. Tiekėjų keitimas sumažėja iki pakoreguoti config/filesystems.php ir aplinkos kintamuosius, neliečiant verslo logikos.
Derindami tai su „Blade“ ir „Breeze“, galite pasiūlyti įkėlimo formas, failų sąrašus ir atsisiuntimo nuorodas, visiškai integruotas į jūsų programos naudotojo patirtį. Be to, „Supabase Storage“ talpyklomis ir politika pagrįstas metodas leidžia jums išnaudoti jos... prieigos kontrolė ir saugumo taisyklės apibrėžti, ką kiekvienas vartotojas gali matyti arba atsisiųsti.
Visa ši paketų, tvarkyklių ir konfigūracijų ekosistema leidžia „Laravel“ labai patogiai dirbti su „Supabase“ tiek reliacinių duomenų aspekte su „Postgres“, tiek... failų saugykla ir UUID valdymasTinkamai pakoregavus raktus, schemas ir tvarkykles, pasiekiama labai tvirta integracija, kuri padeda išvengti daugelio tipinių klaidų, kylančių bandant sujungti abi platformas rankiniu būdu ir be šių pagalbos sluoksnių.
„Laravel“ sujungimas su „Supabase“ duomenų bazei ir saugyklai, specialios „Supabase“ tvarkyklės naudojimas sklandžiam UUID valdymui ir „Flysystem“ adapterio naudojimas saugyklai leidžia kurti modernias programas, kuriose Visa sudėtinga infrastruktūra yra kapsulėje Užkulisiai apie švarios „Laravel“ API veikimą – nuo perkėlimų ir autentifikavimo iki failų įkėlimo į saugius saugyklų segmentus.