Kā integrēt Supabase ar Laravel datubāzei un krātuvei

Pēdējā atjaunošana: 5 decembris 2025
  • Laravel konfigurēšana Supabase Postgres datubāzes izmantošanai ietver draivera, shēmas un vides mainīgo pareizu pielāgošanu.
  • Supabase īpašais draiveris Laravel automātiski atrisina bieži sastopamas problēmas ar UUID kolonnām vaicājumos un savienojumos.
  • Flysystem adapteris ļauj apstrādāt Supabase Storage kā vēl vienu Laravel disku, viegli integrējot failu augšupielādi.
  • Privileģētu pakalpojumu atslēgu un labi konfigurētu segmentu izmantošana ir būtiska, lai izvairītos no rakstīšanas kļūdām un nodrošinātu stabilu plūsmu.

Supabase Laravel platformai

Ja strādājat ar Laravel un esat apņēmies to izmantot. aizmugures programmēšana un jums rodas vēlme pāriet uz datubāzi Pārvaldīts un moderns PostgreSQL, piemēram, SupabaseJūs droši vien esat pamanījuši, ka .env failā nepietiek tikai ar dažu mainīgo maiņu. Ir savienojuma informācija, shēmas, autentifikācija un failu glabāšana, kas, ja netiek ņemtas vērā, var radīt diezgan neskaidras kļūdas.

Turklāt, ja vēlaties spert soli tālāk un izmantot Supabase kā failu glabātuve Integrējot to ar Laravel krātuves sistēmu, lietas kļūst nedaudz sarežģītākas: pakalpojumu atslēgas, segmenti, galapunkti, pielāgoti Flysystem draiveri utt. Labā ziņa ir tā, ka visu — datubāzi, krātuvi un UUID apstrādi — var pilnībā integrēt diezgan tīrā veidā.

Laravel savienošana ar Supabase datubāzi

Pirmais solis ir izveidot darbojošos Laravel projektu un saistīt to ar Supabase nodrošināto Postgres datubāzi. Šim nolūkam ir nepieciešama vide ar PHP un Composer ir atjaunināti un izveidojiet jaunu projektu vai izmantojiet esošu. No konsoles vienkārši ģenerējiet projektu ar tipisku Laravel komandu un pēc tam sāciet savienojuma iestatīšanu.

Kad projekta pamati ir izstrādāti, parasti tiek instalēta vienkārša autentifikācijas sistēma. Laravel Breeze šeit ļoti labi iederas, jo tajā ir iekļauts Asmens veidnes un pamata pieteikšanās un reģistrācijas plūsmaTas ļauj ātri pārbaudīt, vai jūsu datubāzes savienojums ir pareizi konfigurēts un vai varat bez problēmām izveidot lietotājus.

Lai iegūtu savienojuma informāciju, piesakieties savā Supabase panelī un izveidojiet jaunu datubāzes projektu (to var izdarīt tieši no datubāze.jauns(kas novirza uz vedni). Ja jums vēl nav konta, vispirms redzēsiet reģistrācijas ekrānu; ja jums tāds jau ir, jūs nonāksiet tieši projekta iestatījumos un sadaļā, kur varat pārbaudīt savienojuma virkni.

Projekta lapā, savienojuma sadaļā, jūs atradīsiet tādu pogu kā "Connect" vai līdzīgi. Noklikšķinot uz tā, Supabase parāda vairākus savienojuma virknes formātus (URI, atsevišķus parametrus utt.). Nokopējiet pilnu URI, taču atcerieties, ka jums ir nomainiet paroli tam, ko faktiski izmantojat datubāzē, jo bieži tiek parādīts noklusējuma iestatījums vai vietturis.

Ar šo informāciju jums jāatver sava Laravel projekta .env fails un jāatjaunina mainīgie DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME un DB_PASSWORD vai jākonfigurē mainīgais DATABASE_URL, ja vēlaties izmantot pilnu virknes formātu. Mērķis ir panākt, lai viss norādītu uz Supabase Postgres klasteris un nevis uz jūsu lokālo serveri.

Konfigurējiet Postgres draiveri un Supabase shēmu Laravel vidē

Laravel valodā galvenais fails datubāzes konfigurēšanai ir config/datubāze.phpLai gan var tieši izmantot ietvara komplektācijā iekļauto pgsql draiveri, strādājot ar Supabase, ir ierasts veikt dažas papildu korekcijas, īpaši attiecībā uz shēmām un Postgres specifiskajām opcijām.

Tipiska Postgres konfigurācija Laravel vidē varētu izskatīties šādi, savienojumu masīvā zem atslēgas 'pgsql':

'pgsql' => ,

Šeit galvenais ir parametrā meklēšanas_ceļšSupabase pēc noklusējuma izmanto publisko shēmu, kas ir tā, kas ir pieejama, izmantojot tā API. Ja vēlaties savu Laravel lietojumprogrammu atdalīt no šīs shēmas un izvairīties no tabulu vai politiku konfliktiem, ir ļoti ieteicams mainīt, piemēram, meklēšanas ceļu uz savu shēmu. laravel, kā redzams iepriekšējā piemērā.

Tādā veidā jūsu projekta ģenerētās migrācijas un tabulas tiks izveidotas šajā alternatīvajā shēmā, nevis publiski. Šī atdalīšana ievērojami atvieglo pārvaldību. drošības noteikumi, RLS un piekļuve no Supabase paneļa neuzkāpjot uz nekā, uz kā nevajadzētu, un saglabājot sakārtotu datubāzes struktūru.

  Programmatūras izstrādes dzīves cikls: stratēģijas katra posma optimizēšanai

Kad konfigurācijas fails ir pielāgots, migrācijas var sākt, izmantojot parastās Laravel komandas. Tas izveidos autentifikācijas tabulas un visas pārējās jūsu definētās tabulas. Ja viss ir pareizi konfigurēts, komandas darbosies pret Supabase Postgres bez nepieciešamības darīt neko citu.

Kad migrācija ir pabeigta, startējiet izstrādes serveri ar `artisan serve` un mēģiniet reģistrēt un pieteikties lietotājus. Ja netiek parādītas savienojuma vai migrācijas kļūdas, tas nozīmē, ka Laravel darbojas. pareizi sazināties ar Supabase un jūs varat turpiniet veidot savu biznesa loģiku normāli.

Izmantojot īpašu Supabase draiveri Laravel vidē

Lai gan standarta pgsql draiveris darbojas, ir pakotne, kas pievieno Supabase datubāzes draiveris Laravel, paplašinot PostgreSQL darbību ar ļoti noderīgiem uzlabojumiem, īpaši attiecībā uz UUID kolonnu apstrādi un vaicājumu konstruēšanas veidu.

Šī pakotne, kas tiek izplatīta kā prahsys/laravel-supabase, tiek instalēta, izmantojot Composer, un reģistrē papildu draiveri ar nosaukumu supabase, ko varat izmantot savā config/database.php failā. Iekšēji tā ir balstīta uz Laravel Postgres draiveri, bet ietver iestatījumi un meklēšanas gramatikas optimizēta konkrētai Supabase videi.

Pēc instalēšanas jūs varētu deklarēt kaut ko līdzīgu šim savienojumu sadaļa:

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

Šī draivera izmantošanas priekšrocība ir tā, ka jūs joprojām iegūstat visu Postgres dzinēja jaudu, taču tas arī automātiski apstrādā noteiktas smalkas Supabase detaļas, īpaši strādājot ar UUID kā primārās atslēgas vai attiecību laukiTas ļauj izvairīties no nepieciešamības manuāli rakstīt pārsūtīšanu katram sarežģītam vaicājumam.

Pakotne ir izstrādāta arī tā, lai tā labi iederētos modernajās ietvara un PHP versijās, piedāvājot oficiālu saderību ar Laravel 10.x, 11.x, 12.x un ar PHP, sākot ar 8.1 versiju, kā arī ar jebkuru standarta PostgreSQL datubāzi, ieskaitot, protams, Supabase.

Lai nodrošinātu, ka viss darbojas pareizi, pakotnē ir iekļauts automatizētu testu komplekts. Testus var palaist ar komandu `composer test`, kas ātruma nodrošināšanai izmantos atmiņā esošu SQLite datubāzi, vai arī sagatavot failu `.env.testing`, kas norāda uz jūsu Supabase, un palaist komandu `composer test-supabase`, lai pārbaudītu darbību reālā vidē. Attālā Postgres.

UUID pārvaldība Supabase un Laravel

Supabase ir īpatnība ar UUID kolonnām: ja mēģināt salīdzināt UUID tieši ar teksta virkni bez pārveidošanas, vaicājums var neizdodas vai atgriež negaidītus rezultātus"Vienkāršā" Postgres sistēmā to varētu atrisināt ar globāliem pārsūtījumiem vai pielāgotiem operatoriem, bet Supabase šīs globālās pielāgošanas nav atļautas.

Tas nozīmē nekā tiešs stila vaicājums:

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

Tas nedarbosies kā jau varētu gaidīt. Tomēr, ja jūs veicat atklāto atlasi:

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

Vaicājums ir veiksmīgs. Problēma ir tā, ka Laravel vidē, rakstot vaicājumus ar Eloquent vai vaicājumu veidotāju, jūs nevēlaties iet ievietojot CAST katrā vietāŠeit noder iepriekšminētās pakotnes supabase draiveris, kas rūpējas par šo pārveidojumu pievienošanu jūsu vietā.

Ar šo draiveri aktīvu jūs varat veikt izplatīti vaicājumi kā:

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

Un ne tikai tiešās konsultācijās, bet arī pievienojasPiemēram, ja vēlaties izgūt ierakstus un apvienot tos ar lietotāju tabulu, izmantojot UUID lauku, varat rīkoties šādi:

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

Vadītājs ir atbildīgs par noteikumu piemērošanu. īsziņu rakstīšanai nepieciešamie elementi attiecīgajās UUID kolonnās, caurspīdīgi. Tādā veidā jūsu kods Laravel valodā saglabājas idiomātisks, un jums nav jāraksta neapstrādāts SQL vai jāizmanto dīvaini triki katrā sarežģītā vaicājumā.

  Python un datu bāzes: galīgā rokasgrāmata iesācējiem

Ja vēlaties precīzāku kontroli pār to, kuras kolonnas tiek uzskatītas par UUID, pakotne piedāvā šo funkciju CastsUuidColumns jūsu Eloquent modeļiem. Vienkārši izmantojiet to modeļu klasē un definējiet aizsargātu papildu kolonnu masīvu:

use Prahsys\Supabase\Traits\CastsUuidColumns;

class Post extends Model
{
    use CastsUuidColumns;

    protected $uuidColumns = ;
}

Šī īpašība veic trīs svarīgas lietas: pēc noklusējuma tā iekļauj primāro atslēgu kā UUID un pievieno jebkuru kolonnu, ko deklarējat īpašībā. $uuidColumns un paziņo šo informāciju vaicājumu veidotājam, lai tas zinātu, kur lietot pārveidojumus. Tādējādi visa datu piekļuve, kas saistīta ar UUID, kļūst konsekventa un automatizēta.

Vēl sarežģītākiem gadījumiemVarat reģistrēt pielāgotu UUID kolonnu detektoru. Izmantojot PostgresGrammar pakotni, varat norādīt atzvanīšanas funkciju, kas, pamatojoties uz kolonnas nosaukumu vai vaicājuma kontekstu, izlemj, vai tā ir jāapstrādā kā UUID. Piemēram:

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

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

Kad šī funkcija ir iestatīta, sistēma var uzskatīt par UUID visas kolonnas, kuru nosaukumam ir noteikts modelis vai kas atrodas noteiktā sarakstā, pielāgojoties ļoti specifiskas nosaukumu konvencijas jūsu projektu.

Integrējiet Supabase Storage kā failu sistēmu Laravel vidē

Papildus datubāzei daudziem projektiem ir jāuzglabā attēli, dokumenti vai citi lietotāju augšupielādēti faili. Supabase ietver uz kausa balstītu krātuves pakalpojumu, ko varat izmantot kā Laravel disks, izmantojot FlysystemŠim nolūkam ir īpašs adapteris, kas ļauj Supabase Storage apstrādāt kā tikai vēl vienu draiveri failā config/filesystems.php.

Attiecīgā pakotne nodrošina Flysystem adapteri, kas caurspīdīgi integrējas ar ietvara krātuves sistēmu. Tas atbilst minimālajām prasībām PHP >= 8.1, Laravel 10.x vai 11.x un PHP fileinfo paplašinājumu (ext-fileinfo), ko Laravel jau iesaka failu apstrādei. Instalēšana tiek veikta, izmantojot Composer, un pēc iekļaušanas konfigurācijā ir jādefinē tikai supabase disks.

Failā config/failusistēmas.phpMasīva disku ietvaros jūs pievienotu kaut ko līdzīgu šim:

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

Kausa parametrs parasti ir vienkārši krātuves konteinera nosaukums ko izveidojāt Supabase panelī (piemēram, myapp-file-uploads). Galapunkts ir projekta krātuves pakalpojuma bāzes URL, kas ir redzams arī atbilstošajā paneļa sadaļā un parasti tiek atvasināts no projekta URL un reģiona.

Opcija `public` norāda, vai konteinera saturs pēc noklusējuma tiks uzskatīts par publisku. Ja `true`, adapteris ģenerēs pieejamus URL bez īpaša paraksta; ja `false`, tiek aktivizēta opcija `defaultUrlGeneration`, kas var piespiest ģenerēt parakstītus URL ar derīguma termiņu, ko norāda `signedUrlExpires`. Šī konfigurācija ļauj līdzsvarot slodzi. drošību un komfortu atkarībā no apstrādājamo failu veida.

Vispārīgais diska URL parasti tiek atstāts kā nulle, lai adapteris to automātiski iegūtu no galapunkta. Jums tas jāpieskaras tikai tad, ja izmantojat starpniekserveris vai starpniekservera CDN un jūs vēlaties, lai ģenerētie maršruti norādītu uz šo domēnu, nevis uz vietējo Supabase domēnu.

Augšupielādes kļūdu novēršana un Supabase Storage atslēgas izpratne

Diezgan izplatīta problēma, mēģinot augšupielādēt failus no Laravel uz Supabase Storage, ir šādu ziņojumu saņemšana: "Nevar ierakstīt failu šajā atrašanās vietā: augšupielādes/..."Tas parasti norāda, ka, lai gan draiveris ir konfigurēts, Supabase liedz rakstīšanas darbību nepietiekamu atļauju vai nepareizi konfigurētas atslēgas dēļ.

Config/filesystems.php supabase diskā konfigurācijas sadaļā ir minēta izmantošana "privileģēta atslēga" atslēgas laukā, skaidri norādot, ka tikai lasāma atslēga nedarbosies. Tas nozīmē, ka jums ir jāizmanto pakalpojuma atslēga, kurai ir rakstīšanas atļaujas šajā nodalījumā, nevis vienkārši publiska API atslēga, kas paredzēta klientam, vai atslēga, kas paredzēta S3 saderībai bez modifikācijas atļaujām.

Supabase panelī, API un krātuves konfigurācijas sadaļā, jūs atradīsiet gan anonīmās atslēgas, gan pakalpojuma_loma vai līdzvērtīgaŠie ir kodi ar paplašinātām privilēģijām. Tieši šī pakalpojuma atslēga, nevis publiskā, jāievieto mainīgajā SUPABASE_SECRET_ACCESS_KEY, kuru draiveris pēc tam nolasīs, izmantojot env('SUPABASE_SECRET_ACCESS_KEY').

  Aktīvās aizsardzības un ievainojamību skeneris API

Ja esat veicis testēšanu ar S3 atslēgu no krātuves konfigurācijas vai ar vispārīgajām API atslēgām no projekta, ļoti iespējams, ka šiem akreditācijas datiem nav atļaujas rakstīt konkrētajā nodalījumā, kā rezultātā rodas rakstīšanas kļūda. Mainot atslēgas vērtību uz derīga pakalpojuma atslēga ar rakstīšanas atļaujām Un, apstiprinot, ka kauss pastāv un ir pareizi uzrakstīts, problēma parasti tiek atrisināta.

Papildus atslēgai ir svarīgi pārbaudīt, vai SUPABASE_STORAGE_BUCKET definētais segments precīzi atbilst Supabase saskarnē izveidotajam segmentam, ievērojot lielos un mazos burtus, un vai galapunkts atbilst pareizajam šī krātuves instances URL. Tādas detaļas kā papildu rakstzīme vai nepareizs domēns var traucēt adaptera darbību. atrast failu faktisko galamērķi.

Darbplūsma ar Laravel Breeze, Blade un Supabase Storage

Kad datubāze un krātuve ir iestatīta, nākamais dabiskais solis ir visu integrēt ar jūsu Laravel Breeze saskarne un Blade veidnesTādā veidā lietotāji var reģistrēties, autentificēties un augšupielādēt failus Supabase, neizejot no Laravel ekosistēmas.

Savos kontrolleros jūs izmantotu Noliktavas fasāde norādot uz supabase disku. Piemēram, lai augšupielādētu failu, kas saņemts no veidlapas ar faila ievadi, varat rīkoties šādi:

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

Šis kods liek Laravel izmantot disku supabāze un ievietojiet failu virtuālajā augšupielāžu mapē konfigurētajā nodalījumā. Ja atslēga un galapunkts ir pareizi, fails tiks augšupielādēts Supabase krātuvē, un jūs varēsiet izgūt tā ceļu vai ģenerēt publiskus vai parakstītus URL, izmantojot standarta krātuves metodes.

Šīs pieejas priekšrocība ir tā, ka jūsu lietojumprogramma uztur vienu saskarni glabāšanai neatkarīgi no tā, vai tā izmanto lokālo disku, Amazon S3, Supabase vai citu atbalstītu pakalpojumu. Pakalpojumu sniedzēju maiņa ir samazināta līdz pielāgot config/filesystems.php un vides mainīgos, neskarot biznesa loģiku.

Apvienojot to ar Blade un Breeze, jūs varat piedāvāt augšupielādes veidlapas, failu sarakstus un lejupielādes saites, kas ir pilnībā integrētas jūsu lietojumprogrammas lietotāja pieredzē. Turklāt Supabase Storage uz segmentiem un politikām balstītā pieeja ļauj jums izmantot tās piekļuves kontroles un drošības noteikumi lai definētu, ko katrs lietotājs var redzēt vai lejupielādēt.

Visa šī pakotņu, draiveru un konfigurāciju ekosistēma ļauj Laravel ļoti ērti strādāt ar Supabase gan relāciju datu aspektā ar Postgres, gan... failu glabāšana un UUID pārvaldībaPareizi pielāgojot atslēgas, shēmas un draiverus, jūs panākat ļoti stabilu integrāciju, kas novērš daudzas tipiskas kļūdas, kas rodas, mēģinot manuāli savienot abas platformas bez šo palīdzības slāņu izmantošanas.

Laravel savienošana ar Supabase datubāzei un krātuvei, īpaša Supabase draivera izmantošana UUID nemanāmai pārvaldībai un Flysystem adaptera izmantošana krātuvei ļauj veidot modernas lietojumprogrammas, kurās Visa kompleksā infrastruktūra ir iekapsulēta Laravel tīrās API aizkulisēs, sākot no migrācijām un autentifikācijas līdz failu augšupielādei drošos konteineros.

Blade Hastack direktīva Laravel valodā
Saistītais raksts:
Blade direktīva hasStack Laravel valodā un uzlabota steka kontrole