Paano isama ang Supabase sa Laravel para sa database at imbakan

Huling pag-update: 5 Disyembre 2025
May-akda: TecnoDigital
  • Ang pag-configure ng Laravel upang magamit ang database ng Supabase Postgres ay nagsasangkot ng wastong pagsasaayos sa mga variable ng driver, schema, at kapaligiran.
  • Awtomatikong nireresolba ng partikular na driver ng Supabase para sa Laravel ang mga karaniwang problema sa mga column ng UUID sa mga query at pagsali.
  • Binibigyang-daan ka ng adapter ng Flysystem na ituring ang Supabase Storage bilang isa pang Laravel disk, na madaling isama ang mga pag-upload ng file.
  • Ang paggamit ng mga privileged service key at well-configured na mga bucket ay susi sa pag-iwas sa mga error sa pagsusulat at pagtiyak ng isang matatag na daloy.

Supabase para kay Laravel

Kung nagtatrabaho ka sa Laravel at nakatuon sa backend programming at parang gusto mong tumalon sa isang database moderno, pinamamahalaang PostgreSQL tulad ng SupabaseMarahil ay napansin mo na hindi sapat na baguhin lang ang ilang variable sa .env file. May mga detalye ng koneksyon, mga scheme, pagpapatunay, at pag-iimbak ng file na, kung napapabayaan, ay maaaring humantong sa ilang medyo misteryosong mga error.

Higit pa rito, kapag gusto mong pumunta ng isang hakbang pa at gamitin Supabase bilang imbakan ng file Kapag isinama sa storage system ng Laravel, nagiging mas kumplikado ang mga bagay: mga service key, bucket, endpoint, custom na mga driver ng Flysystem, atbp. Ang magandang balita ay ang lahat—ang database, storage, at paghawak ng UUID—ay maaaring ganap na maisama sa medyo malinis na paraan.

Pagkonekta sa Laravel sa database ng Supabase

Ang unang hakbang ay ang pagkakaroon ng gumaganang proyekto ng Laravel at i-link ito sa database ng Postgres na ibinigay ng Supabase. Para dito, kailangan mo ng isang kapaligiran na may Na-update ang PHP at Composer at lumikha ng isang bagong proyekto o gumamit ng isang umiiral na. Mula sa console, buuin lang ang proyekto gamit ang tipikal na utos ng Laravel at pagkatapos ay simulan ang pag-set up ng koneksyon.

Kapag mayroon ka nang balangkas ng proyekto, ang karaniwang hakbang ay ang pag-install ng isang simpleng sistema ng pagpapatunay. Tamang-tama ang Laravel Breeze dahil kasama dito Mga template ng talim at pangunahing daloy ng pag-login at pagpaparehistroBinibigyang-daan ka nitong mabilis na ma-verify na ang iyong koneksyon sa database ay maayos na na-configure at na maaari kang lumikha ng mga user nang walang problema.

Upang makuha ang mga detalye ng koneksyon, mag-log in sa iyong panel ng Supabase at lumikha ng bagong proyekto sa database (magagawa mo ito nang direkta mula sa database.bago(na nagre-redirect sa wizard). Kung wala ka pang account, makikita mo muna ang screen ng pag-sign up; kung mayroon ka na, direktang pupunta ka sa mga setting ng proyekto at sa seksyon kung saan maaari mong suriin ang string ng koneksyon.

Sa loob ng pahina ng proyekto, sa seksyon ng koneksyon, makikita mo ang isang pindutan tulad ng "Kumonekta" o katulad. Kapag na-click mo ito, ipinapakita sa iyo ng Supabase ang ilang format ng string ng koneksyon (URI, mga indibidwal na parameter, atbp.). Kopyahin ang kumpletong URI, ngunit tandaan na kailangan mo palitan ang password para sa aktwal mong ginagamit sa database, dahil madalas na ipinapakita ang isang default o isang placeholder.

Gamit ang impormasyong iyon, kailangan mong pumunta sa .env file ng iyong proyekto sa Laravel at i-update ang mga variable na DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, at DB_PASSWORD, o i-configure ang DATABASE_URL variable kung mas gusto mong gamitin ang buong format ng string. Ang layunin ay para sa lahat ng bagay na ituro sa Kumpol ng Supabase Postgres at hindi sa iyong localhost.

I-configure ang driver ng Postgres at ang schema ng Supabase sa Laravel

Sa Laravel, ang pangunahing file para sa pagsasaayos ng database ay config/database.phpBagama't maaari mong direktang gamitin ang pgsql driver na kasama ng framework, kapag nagtatrabaho sa Supabase, karaniwan nang mag-aplay ng ilang karagdagang pagsasaayos, lalo na tungkol sa mga schema at mga opsyon na partikular sa Postgres.

Ang isang tipikal na pagsasaayos para sa Postgres sa Laravel ay maaaring magmukhang ganito, sa loob ng hanay ng mga koneksyon, sa ilalim ng susi 'pgsql':

'pgsql' => ,

Ang susi dito ay nasa parameter search_pathAng Supabase, bilang default, ay gumagamit ng pampublikong schema, na siyang nalantad sa pamamagitan ng mga API nito. Kung gusto mong panatilihing hiwalay ang iyong Laravel application mula sa schema na iyon at maiwasan ang mga salungatan sa talahanayan o patakaran, lubos na inirerekomenda na baguhin ang search_path sa iyong sariling schema, halimbawa. laravel, tulad ng nakikita sa nakaraang halimbawa.

Sa ganitong paraan, ang mga paglilipat at talahanayang nabuo ng iyong proyekto ay gagawin sa alternatibong schema na iyon at hindi sa publiko. Ang paghihiwalay na ito ay ginagawang mas madali ang pamamahala. mga panuntunan sa seguridad, RLS at pag-access mula sa panel ng Supabase nang hindi natatapakan ang anumang hindi mo dapat at pinapanatiling maayos ang istraktura ng database.

  Siklo ng Buhay ng Pag-develop ng Software: Mga Istratehiya sa Pag-optimize sa Bawat Yugto

Kapag naayos mo na ang configuration file, maaari mong ilunsad ang mga paglilipat gamit ang karaniwang mga utos ng Laravel. Lilikha ito ng mga talahanayan ng pagpapatunay at anumang iba pang mga talahanayan na iyong tinukoy. Kung ang lahat ay na-configure nang tama, ang mga utos ay tatakbo laban sa Supabase Postgres nang hindi mo kailangang gumawa ng anumang bagay.

Kapag natapos na ang mga paglilipat, simulan ang development server gamit ang `artisan serve` at subukang magrehistro at mag-log in ng mga user. Kung walang lumilitaw na error sa koneksyon o paglilipat, nangangahulugan ito na gumagana ang Laravel. pakikipag-usap nang tama sa Supabase at kaya mo ipagpatuloy ang pagbuo ng lohika ng iyong negosyo normal

Gamit ang isang partikular na driver ng Supabase sa Laravel

Bagama't gumagana ang karaniwang pgsql driver, mayroong isang pakete na nagdaragdag ng a supabase database driver para sa Laravel, pagpapalawak ng pag-uugali ng PostgreSQL na may napakakapaki-pakinabang na mga pagpapabuti, lalo na tungkol sa paghawak ng mga column ng UUID at ang paraan ng pagbuo ng mga query.

Ang package na ito, na ipinamahagi bilang prahsys/laravel-supabase, ay naka-install sa pamamagitan ng Composer at nagrerehistro ng karagdagang driver na tinatawag na supabase na magagamit mo sa iyong config/database.php file. Sa panloob, ito ay batay sa driver ng Postgres ng Laravel, ngunit isinasama mga setting at lookup grammar na-optimize para sa partikular na kapaligiran ng Supabase.

Kapag na-install, maaari kang magdeklara ng isang bagay tulad ng sumusunod sa loob ng seksyon ng mga koneksyon:

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

Ang bentahe ng paggamit ng driver na ito ay makukuha mo pa rin ang lahat ng kapangyarihan ng Postgres engine, ngunit awtomatiko rin itong humahawak sa ilang mga detalye ng Supabase, lalo na kapag nagtatrabaho sa Ang mga UUID bilang pangunahing susi o mga field ng relasyonIniiwasan nitong manu-manong magsulat ng pag-cast para sa bawat kumplikadong query.

Dinisenyo din ang package para magkasya nang maayos sa mga modernong bersyon ng framework at PHP, na nag-aalok ng opisyal na compatibility sa Laravel 10.x, 11.x, 12.x at sa PHP mula sa bersyon 8.1 pataas, pati na rin ang anumang karaniwang database ng PostgreSQL, kasama siyempre ang Supabase.

Para matiyak na gumagana nang tama ang lahat, ang package ay may kasamang suite ng mga automated na pagsubok. Maaari mong patakbuhin ang mga pagsubok gamit ang command na `composer test`, na gagamit ng in-memory SQLite database para sa bilis, o maghanda ng `.env.testing` file na tumuturo sa iyong Supabase at patakbuhin ang `composer test-supabase` upang i-verify ang gawi sa isang real-world na kapaligiran. Malayong Postgres.

Pamamahala ng UUID sa Supabase at Laravel

Ang Supabase ay may kakaiba sa mga column ng UUID: kung susubukan mong ihambing ang isang UUID nang direkta sa isang text string nang hindi nag-cast, ang query ay maaaring nabigo o nagbabalik ng hindi inaasahang resultaSa isang "plain" na Postgres system, maaari mong lutasin ito gamit ang mga global cast o custom na operator, ngunit sa Supabase hindi pinapayagan ang mga pandaigdigang pagpapasadyang ito.

Nagpapahiwatig ito kaysa sa isang direktang pagtatanong ng istilo:

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

Hindi ito gagana gaya ng inaasahan mo. Gayunpaman, kung magsasagawa ka ng tahasang paghahagis:

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

Ang query ay matagumpay. Ang problema ay sa Laravel, kapag sumulat ka ng mga query gamit ang Eloquent o ang tagabuo ng query, hindi mo gustong pumunta paglalagay ng CAST sa bawat lugarDoon papasok ang driver ng supabase mula sa nabanggit na package, na siyang bahala sa pagdaragdag ng mga cast na iyon para sa iyo.

Kapag aktibo ang driver na iyon, maaari kang gumanap karaniwang mga tanong bilang:

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

At hindi lamang sa mga direktang konsultasyon, kundi pati na rin sa SinamahanHalimbawa, kung gusto mong kunin ang mga post at isama ang mga ito sa talahanayan ng mga user gamit ang isang UUID field, maaari kang gumawa ng ganito:

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

Ang driver ay responsable para sa paglalapat ng kailangang mag-text ang mga cast sa mga nauugnay na column ng UUID, nang malinaw. Sa ganitong paraan, nananatiling idiomatic ang iyong code para sa Laravel, at hindi mo kailangang magsulat ng raw SQL o gumamit ng mga kakaibang trick sa bawat kumplikadong query.

  Python at Mga Database: Ang Gabay sa Ultimate Beginner

Kung gusto mo ng mas pinong kontrol sa kung aling mga column ang itinuturing na UUID, inaalok ng package ang katangian CastsUuidColumns para sa iyong Eloquent na mga modelo. Gamitin lang ito sa klase ng modelo at tukuyin ang isang protektadong hanay ng mga karagdagang column:

use Prahsys\Supabase\Traits\CastsUuidColumns;

class Post extends Model
{
    use CastsUuidColumns;

    protected $uuidColumns = ;
}

Ang katangiang ito ay gumagawa ng tatlong mahahalagang bagay: kabilang dito ang pangunahing susi bilang UUID bilang default, at nagdaragdag ito ng anumang column na idineklara mo sa property. $uuidColumns at ipinapaalam ang impormasyong iyon sa tagabuo ng query upang malaman nito kung saan ilalapat ang mga cast. Kaya, lahat ng data access na kinasasangkutan ng mga UUID ay nagiging pare-pareho at awtomatiko.

Para sa mas advanced na mga kasoMaaari kang magparehistro ng custom na UUID column detector. Gamit ang PostgresGrammar package, maaari kang tumukoy ng callback function na, batay sa pangalan ng column o konteksto ng query, ay nagpapasya kung dapat itong ituring bilang isang UUID. Halimbawa:

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

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

Sa pagtatatag ng function na ito, maaaring isaalang-alang ng system bilang UUID ang lahat ng mga column na ang pangalan ay may isang tiyak na pattern o nasa loob ng isang partikular na listahan, na umaangkop sa napaka tiyak na mga kombensiyon sa pagbibigay ng pangalan ng iyong proyekto.

Isama ang Supabase Storage bilang isang file system sa Laravel

Bilang karagdagan sa database, maraming proyekto ang kailangang mag-imbak ng mga larawan, dokumento, o iba pang mga file na na-upload ng mga user. Kasama sa Supabase ang isang bucket-based na storage service na maaari mong gamitin bilang Laravel disk gamit ang FlysystemPara sa layuning ito, mayroong isang partikular na adaptor na nagpapahintulot sa Supabase Storage na ituring bilang isa pang driver sa loob ng config/filesystems.php.

Ang package na pinag-uusapan ay nagbibigay ng Flysystem adapter na malinaw na sumasama sa Storage system ng framework. Natutugunan nito ang pinakamababang pangangailangan ng PHP >= 8.1, Laravel 10.x o 11.x at ang PHP fileinfo extension (ext-fileinfo), na inirerekomenda na ni Laravel para sa paghawak ng mga file. Ang pag-install ay tapos na sa Composer, at kapag naisama na, kailangan mo lang tukuyin ang supabase disk sa configuration.

Sa File config/filesystems.phpSa loob ng array disks, magdadagdag ka ng katulad ng sumusunod:

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

Ang parameter ng bucket ay karaniwang ang pangalan ng storage bucket na ginawa mo sa panel ng Supabase (halimbawa, myapp-file-uploads). Ang endpoint ay ang base URL ng storage service ng proyekto, na makikita rin sa kaukulang seksyon ng panel, at kadalasang hinango sa URL ng proyekto at rehiyon.

Ang opsyong `pampubliko` ay nagpapahiwatig kung ang mga nilalaman ng bucket ay ituturing bilang pampubliko bilang default. Kung `true`, bubuo ang adapter ng mga naa-access na URL nang walang espesyal na lagda; kung `false`, ang opsyon na `defaultUrlGeneration` ay gagana, na maaaring pilitin ang pagbuo ng mga nilagdaang URL na may expiration time na tinukoy ng `signedUrlExpires`. Ang pagsasaayos na ito ay nagpapahintulot sa iyo na balansehin ang pagkarga. kaligtasan at ginhawa depende sa uri ng mga file na iyong hinahawakan.

Ang pangkalahatang URL ng disk ay karaniwang iniiwan bilang null upang awtomatikong makuha ito ng adaptor mula sa endpoint. Dapat mo lamang itong hawakan kung gumagamit ka ng a proxy o intermediate CDN at gusto mong ang mga nabuong ruta ay tumuro sa domain na iyon sa halip na sa katutubong Supabase domain.

I-troubleshoot ang mga error sa pag-upload at unawain ang susi sa Storage ng Supabase

Ang isang medyo karaniwang problema kapag sinusubukang mag-upload ng mga file sa Supabase Storage mula sa Laravel ay ang pagtanggap ng mga mensahe tulad ng “Hindi magsulat ng file sa lokasyon: uploads/…”Karaniwang ipinapahiwatig nito na, bagama't naka-configure ang driver, tinatanggihan ng Supabase ang pagpapatakbo ng pagsulat dahil sa hindi sapat na mga pahintulot o isang maling pagkaka-configure na key.

Sa supabase disk ng config/filesystems.php, binabanggit ng configuration ang paggamit isang "privileged key" sa key field, tahasang nagsasabi na ang isang read-only na key ay hindi gagana. Nangangahulugan ito na kailangan mong gumamit ng service key na may mga pahintulot sa pagsusulat sa bucket, hindi lang isang pampublikong API key na inilaan para sa kliyente o isang key na nilayon para sa S3 compatibility nang walang mga pahintulot sa pagbabago.

Sa panel ng Supabase, sa loob ng seksyon ng configuration ng API at storage, makikita mo ang parehong mga anonymous na key at ang service_role o katumbasIto ang mga may pinalawig na pribilehiyo. Ang service key na iyon, at hindi ang pampubliko, ang dapat mong ilagay sa SUPABASE_SECRET_ACCESS_KEY variable, na babasahin ng driver sa env('SUPABASE_SECRET_ACCESS_KEY').

  Aktibong depensa at scanner ng kahinaan para sa mga API

Kung sumusubok ka gamit ang S3 key mula sa configuration ng storage o gamit ang mga generic na API key mula sa proyekto, malamang na walang pahintulot ang mga kredensyal na iyon na sumulat sa partikular na bucket, na nagreresulta sa error sa pagsulat. Ang pagpapalit ng key value sa a wastong service key na may mga pahintulot sa pagsulat At sa pamamagitan ng pagkumpirma na ang bucket ay umiiral at tama ang pagkakasulat, ang problema ay kadalasang nalulutas.

Bilang karagdagan sa key, mahalagang i-verify na ang bucket na tinukoy sa SUPABASE_STORAGE_BUCKET ay eksaktong tumutugma sa ginawa sa interface ng Supabase, na may kinalaman sa malalaking titik at maliliit na titik, at ang endpoint ay tumutugma sa tamang URL para sa instance ng storage na iyon. Ang isang detalye tulad ng dagdag na character o isang maling domain ay maaaring pumigil sa adapter na gumana. hanapin ang aktwal na patutunguhan ng mga file.

Workflow na may Laravel Breeze, Blade, at Supabase Storage

Kapag na-set up mo na ang iyong database at storage, ang susunod na natural na hakbang ay ang isama ang lahat sa iyong Laravel Breeze interface at mga template ng BladeSa ganitong paraan, maaaring magrehistro, magpatotoo, at mag-upload ng mga file ang mga user sa Supabase nang hindi umaalis sa Laravel ecosystem.

Sa loob ng iyong mga controller, gagamitin mo ang Imbakan ng harapan nakaturo sa supabase disk. Halimbawa, para mag-upload ng file na natanggap mula sa isang form na may file input, maaari kang gumawa ng isang bagay tulad ng:

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

Sinasabi ng code na ito kay Laravel na gamitin ang disk supabase at ilagay ang file sa loob ng folder ng virtual na pag-upload sa loob ng naka-configure na bucket. Kung tama ang key at endpoint, ia-upload ang file sa storage ng Supabase, at maaari mong kunin ang path nito o bumuo ng mga pampubliko o nilagdaang URL gamit ang mga karaniwang paraan ng storage.

Ang bentahe ng diskarteng ito ay ang iyong application ay nagpapanatili ng isang interface para sa storage, hindi alintana kung ito ay gumagamit ng lokal na disk, Amazon S3, Supabase, o isa pang suportadong serbisyo. Ang paglipat ng mga provider ay nabawasan sa ayusin ang config/filesystems.php at ang mga variable ng kapaligiran, nang hindi hinahawakan ang lohika ng negosyo.

Sa pamamagitan ng pagsasama nito sa Blade at Breeze, maaari kang mag-alok ng mga form sa pag-upload, mga listahan ng file, at mga link sa pag-download na ganap na isinama sa karanasan ng user ng iyong application. Higit pa rito, binibigyang-daan ka ng bucket-at policy-based na diskarte ng Supabase Storage na gamitin ito mga kontrol sa pag-access at mga panuntunan sa seguridad upang tukuyin kung ano ang makikita o mada-download ng bawat user.

Ang buong ecosystem na ito ng mga package, driver, at configuration ay nagbibigay-daan sa Laravel na gumana nang napaka-komportable sa Supabase, kapwa sa aspeto ng relational data sa Postgres at sa... imbakan ng file at pamamahala ng UUIDSa pamamagitan ng maayos na pagsasaayos sa mga key, schema, at driver, makakamit mo ang isang napakahusay na pagsasama na umiiwas sa marami sa mga karaniwang error na nangyayari kapag sinusubukang ikonekta ang parehong mga platform nang manu-mano at nang wala ang mga layer ng tulong na ito.

Ang pagkonekta sa Laravel sa Supabase para sa database at storage, paggamit ng nakalaang Supabase driver para maayos na pamahalaan ang mga UUID, at ang paggamit ng Flysystem adapter para sa storage ay nagbibigay-daan sa iyong bumuo ng mga modernong application kung saan Ang buong kumplikadong imprastraktura ay naka-encapsulated Sa likod ng mga eksena ng malinis na API ng Laravel, mula sa paglilipat at pagpapatotoo hanggang sa pag-upload ng mga file upang ma-secure ang mga bucket.

blade hastack directive sa laravel
Kaugnay na artikulo:
Ang direktiba ng blade ay mayStack sa Laravel at advanced na kontrol sa stack