Како интегрисати Supabase са Laravel-ом за базу података и складиштење

Последње ажурирање: КСНУМКС децембра КСНУМКС
  • Конфигурисање Ларавела за коришћење Supabase Postgres базе података подразумева правилно подешавање драјвера, шеме и променљивих окружења.
  • Супабејсов специфични драјвер за Ларавел аутоматски решава уобичајене проблеме са UUID колонама у упитима и спајањима.
  • Flysystem адаптер вам омогућава да третирате Supabase Storage као још један Laravel диск, лако интегришући отпремање датотека.
  • Коришћење привилегованих сервисних кључева и добро конфигурисаних канти је кључно за избегавање грешака при писању и обезбеђивање стабилног тока.

Супабејз за Ларавел

Ако радите са Ларавелом и посвећени сте бекенд програмирање и осећате се као да желите да пређете на базу података модерни, управљани PostgreSQL као што је SupabaseВероватно сте приметили да није довољно само променити неколико променљивих у .env датотеци. Постоје детаљи повезивања, шеме, аутентификација и складиштење датотека који, ако се занемаре, могу довести до неких прилично криптичних грешака.

Штавише, када желите да одете корак даље и користите Супабасе као складиште датотека Када се интегрише са Laravel-овим системом за складиштење података, ствари постају мало сложеније: сервисни кључеви, корпе, крајње тачке, прилагођени Flysystem драјвери итд. Добра вест је да се све - база података, складиште и руковање UUID-ом - може савршено интегрисати на прилично чист начин.

Повезивање Ларавела са Супабејс базом података

Први корак је имати функционалан Laravel пројекат и повезати га са Postgres базом података коју обезбеђује Supabase. За ово вам је потребно окружење са PHP и Composer су ажурирани и креирајте нови пројекат или користите постојећи. Из конзоле једноставно генеришите пројекат типичном Laravel командом, а затим почните са подешавањем везе.

Када имате скелет пројекта, уобичајени корак је инсталирање једноставног система за аутентификацију. Laravel Breeze се одлично уклапа јер укључује Шаблони сечива и основни ток пријаве и регистрацијеОво вам омогућава да брзо проверите да ли је ваша веза са базом података правилно конфигурисана и да можете да креирате кориснике без проблема.

Да бисте добили детаље везе, пријавите се на свој Supabase панел и креирајте нови пројекат базе података (то можете учинити директно из база података.ново(што преусмерава на чаробњака). Ако још увек немате налог, прво ћете видети екран за регистрацију; ако га већ имате, отићи ћете директно на подешавања пројекта и одељак где можете да проверите стринг за повезивање.

Унутар странице пројекта, у одељку за повезивање, наћи ћете дугме као што је "Цоннецт" или слично. Када кликнете на њега, Supabase вам приказује неколико формата низа за повезивање (URI, појединачни параметри итд.). Копирајте цео URI, али запамтите да морате замени лозинку за онај који заправо користите у бази података, пошто се често приказује подразумевани или резервисани текст.

Са тим информацијама, потребно је да одете у .env датотеку вашег Laravel пројекта и ажурирате променљиве DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME и DB_PASSWORD или конфигуришете променљиву DATABASE_URL ако желите да користите формат пуног низа. Циљ је да све указује на Supabase Postgres кластер а не вашем локалном хосту.

Конфигуришите Postgres драјвер и Supabase шему у Laravel-у

У Ларавелу, кључна датотека за конфигурацију базе података је config/database.phpИако можете директно користити pgsql драјвер који долази са фрејмворком, при раду са Supabase-ом уобичајено је применити нека додатна подешавања, посебно у вези са шемама и опцијама специфичним за Postgres.

Типична конфигурација за Postgres у Laravel-у може изгледати овако, унутар низа connections, под кључем „pgsql“:

'pgsql' => ,

Кључ овде је у параметру путања_претрагеСупабејс, подразумевано, користи јавну шему, која је откривена путем његових АПИ-ја. Ако желите да ваша Ларавел апликација буде одвојена од те шеме и да избегнете сукобе табела или политика, топло се препоручује да промените путању претраге (search_path) у сопствену шему, на пример. ларавел, као што се види у претходном примеру.

На овај начин, миграције и табеле које генерише ваш пројекат биће креиране у тој алтернативној шеми, а не јавно. Ово раздвајање знатно олакшава управљање. безбедносна правила, RLS и приступ из Supabase панела без газења на нешто што не би требало и одржавајући структуру базе података организованом.

  Програмски језик Цобол: Комплетан преглед

Када подесите конфигурациони фајл, можете покренути миграције користећи уобичајене Laravel команде. Ово ће креирати табеле за аутентификацију и све остале табеле које сте дефинисали. Ако је све исправно конфигурисано, команде ће се покренути у односу на Супабејс Постгрес без потребе да радите било шта друго.

Када се миграције заврше, покрените развојни сервер са `artisan serve` и покушајте да региструјете и пријавите кориснике. Ако се не појаве грешке у вези са повезивањем или миграцијом, то значи да Laravel ради. исправна комуникација са Supabase-ом и можете наставите да градите своју пословну логику нормално.

Коришћење специфичног Supabase драјвера у Laravel-у

Иако стандардни pgsql драјвер ради, постоји пакет који додаје драјвер базе података supabase за Laravel, проширујући понашање PostgreSQL-а веома корисним побољшањима, посебно у вези са руковањем UUID колонама и начином на који се конструишу упити.

Овај пакет, дистрибуиран као prahsys/laravel-supabase, инсталира се преко Composer-а и региструје додатни драјвер под називом supabase који можете користити у својој датотеци config/database.php. Интерно је базиран на Laravel-овом Postgres драјверу, али укључује подешавања и граматике претраге оптимизовано за специфично Supabase окружење.

Једном инсталирано, можете декларисати нешто попут следећег унутар одељак за везе:

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

Предност коришћења овог драјвера је у томе што и даље добијате сву снагу Postgres мотора, али он такође аутоматски обрађује одређене осетљиве детаље Supabase-а, посебно када радите са UUID-ови као примарни кључеви или поља за односеОво избегава ручно писање кастинга за сваки компликовани упит.

Пакет је такође дизајниран да се добро уклапа са модерним верзијама фрејмворка и PHP-а, нудећи званичну компатибилност са Ларавел 10.x, 11.x, 12.x и са PHP-ом од верзије 8.1 па надаље, као и са било којом стандардном PostgreSQL базом података, укључујући наравно и Supabase.

Да би се осигурало да све исправно функционише, пакет укључује скуп аутоматизованих тестова. Тестове можете покренути командом `composer test`, која ће користити SQLite базу података у меморији ради брзине, или припремити датотеку `.env.testing` која указује на вашу Supabase и покренути `composer test-supabase` да бисте проверили понашање у стварном окружењу. Удаљени Postgres.

Управљање UUID-овима у Supabase-у и Laravel-у

Супабејс има једну особеност са UUID колонама: ако покушате да упоредите UUID директно са текстуалним низом без претварања, упит може неуспешно или врати неочекиване резултатеУ „обичном“ Postgres систему ово бисте могли решити глобалним претварањима типа или прилагођеним операторима, али у Supabase-у ова глобална прилагођавања нису дозвољена.

То имплицира него директно испитивање стила:

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

Неће радити као што бисте и очекивали. Међутим, ако спроведете експлицитно претварање:

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

Упит је успешан. Проблем је што у Ларавелу, када пишете упите помоћу Eloquent-а или креатора упита, не желите да идете стављајући CAST у свако место гдеТу на сцену ступа supabase драјвер из горе поменутог пакета, који се брине о додавању тих претварања уместо вас.

Са тим активним драјвером, можете да извршите уобичајени упити као:

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

И не само у директним консултацијама, већ и у јоинсНа пример, ако желите да преузмете објаве и спојите их са табелом корисника користећи UUID поље, можете урадити нешто овако:

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

Возач је одговоран за примену потребни кастови за слање порука у релевантним UUID колонама, транспарентно. На овај начин, ваш код остаје идиоматски за Laravel и не морате да пишете сирови SQL или да користите чудне трикове у сваком сложеном упиту.

  Предности прилагођеног развоја софтвера

Ако желите прецизнију контролу над тим које колоне се сматрају UUID-овима, пакет нуди особину CastsUuidColumns за ваше Eloquent моделе. Једноставно га користите у класи модела и дефинишите заштићени низ додатних колона:

use Prahsys\Supabase\Traits\CastsUuidColumns;

class Post extends Model
{
    use CastsUuidColumns;

    protected $uuidColumns = ;
}

Ова особина ради три важне ствари: подразумевано укључује примарни кључ као UUID и додаје било коју колону коју декларишете у својству. $uuidColumns и преноси те информације креатору упита како би знао где да примени претварања. Стога, сав приступ подацима који укључује UUID-ове постаје доследно и аутоматизовано.

За још напредније случајевеМожете регистровати прилагођени UUID детектор колоне. Користећи PostgresGrammar пакет, можете навести функцију повратног позива која, на основу имена колоне или контекста упита, одлучује да ли је треба третирати као UUID. На пример:

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

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

Када је ова функција успостављена, систем може сматрати као UUID-ове све колоне чије име има одређени образац или се налази унутар одређене листе, прилагођавајући се веома специфичне конвенције именовања вашег пројекта.

Интегришите Supabase Storage као фајл систем у Laravel-у

Поред базе података, многи пројекти морају да чувају слике, документе или друге датотеке које су отпремили корисници. Supabase укључује услугу складиштења засновану на кантама коју можете користити као Ларавел диск користећи ФлајсистемУ ту сврху постоји посебан адаптер који омогућава да се Supabase Storage третира као још један драјвер унутар config/filesystems.php.

Дотични пакет пружа Flysystem адаптер који се транспарентно интегрише са системом за складиштење фрејмворка. Испуњава минималне захтеве PHP >= 8.1, Laravel 10.x или 11.x и PHP fileinfo екстензију (ext-fileinfo), коју Laravel већ препоручује за руковање датотекама. Инсталација се врши помоћу Composer-а, и када се једном укључи, потребно је само да дефинишете supabase диск у конфигурацији.

У досијеу config/filesystems.phpУнутар низа дискова, додали бисте нешто слично следећем:

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

Параметар канте је обично једноставно назив корпе за складиштење које сте креирали у Supabase панелу (на пример, myapp-file-uploads). Крајња тачка је основни URL сервиса за складиштење пројекта, такође видљив у одговарајућем одељку панела и обично је изведен из URL-а и региона пројекта.

Опција „public“ означава да ли ће се садржај корпе подразумевано третирати као јавни. Ако је вредност „true“, адаптер ће генерисати приступачне URL-ове без посебног потписа; ако је вредност „false“, опција „defaultUrlGeneration“ ступа на снагу, која може приморати генерисање потписаних URL-ова са временом истека одређеним помоћу „signedUrlExpires“. Ова конфигурација вам омогућава да уравнотежите оптерећење. sigurnost i udobnost у зависности од врсте датотека које обрађујете.

Општи URL диска се обично оставља као null тако да га адаптер аутоматски изводи из крајње тачке. Требало би да га додирнете само ако користите прокси или посреднички CDN и желите да генерисане руте указују на тај домен уместо на изворни Supabase домен.

Решавање грешака при отпремању и разумевање кључа за Supabase Storage

Прилично чест проблем при покушају отпремања датотека на Supabase Storage из Laravel-а је добијање порука попут „Није могуће записати датотеку на локацији: отпремања/…“Ово обично указује да, иако је драјвер конфигурисан, Supabase одбија операцију писања због недовољних дозвола или погрешно конфигурисаног кључа.

На supabase диску config/filesystems.php, конфигурација помиње коришћење „привилеговани кључ“ у пољу за кључ, експлицитно наводећи да кључ само за читање неће радити. То значи да морате да користите сервисни кључ који има дозволе за писање у корпи, а не само јавни API кључ намењен клијенту или кључ намењен за S3 компатибилност без дозвола за модификацију.

У Supabase панелу, у одељку за конфигурацију API-ја и складиштења, пронаћи ћете и анонимне кључеве и улога_сервиса или еквивалентТо су они са проширеним привилегијама. Управо тај сервисни кључ, а не јавни, треба да поставите у променљиву SUPABASE_SECRET_ACCESS_KEY, коју ће драјвер затим прочитати кроз env('SUPABASE_SECRET_ACCESS_KEY').

  Значај база података у пословном свету

Ако сте тестирали са S3 кључем из конфигурације складишта или са генеричким API кључевима из пројекта, веома је вероватно да ти акредитиви немају дозволу за писање у одређено складиште, што доводи до грешке при писању. Промена вредности кључа у важећи сервисни кључ са дозволама за писање И потврђивањем да канта постоји и да је правилно написана, проблем се обично решава.

Поред кључа, важно је проверити да ли се корпа дефинисана у SUPABASE_STORAGE_BUCKET тачно подудара са оном креираном у Supabase интерфејсу, поштујући велика и мала слова, и да ли крајња тачка одговара исправном URL-у за ту инстанцу складишта. Детаљ као што је додатни знак или погрешан домен може спречити рад адаптера. пронађите стварно одредиште датотека.

Радни ток са Laravel Breeze, Blade и Supabase Storage-ом

Када подесите базу података и складиште, следећи природан корак је интеграција свега са вашим Laravel Breeze интерфејс и Blade шаблониНа овај начин, корисници могу да се региструју, аутентификују и отпремају датотеке на Supabase без напуштања Laravel екосистема.

Унутар ваших контролера, користили бисте Фасада за складиштење показујући на диск supabase. На пример, да бисте отпремили датотеку примљену из формулара са уносом датотеке, могли бисте да урадите нешто попут:

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

Овај код говори Ларавелу да користи диск супабасе и поставите датотеку унутар виртуелне фасцикле за отпремање унутар конфигурисаног корпе. Ако су кључ и крајња тачка исправни, датотека ће бити отпремљена у Supabase складиште и можете преузети њену путању или генерисати јавне или потписане URL-ове користећи стандардне методе складиштења.

Предност овог приступа је у томе што ваша апликација одржава један интерфејс за складиштење, без обзира да ли користи локални диск, Amazon S3, Supabase или неку другу подржану услугу. Промена провајдера је сведена на подесите config/filesystems.php и променљиве окружења, без додиривања пословне логике.

Комбиновањем овога са Blade и Breeze, можете понудити обрасце за отпремање, листе датотека и линкове за преузимање потпуно интегрисане у корисничко искуство ваше апликације. Штавише, приступ Supabase Storage-а заснован на кантама и политикама вам омогућава да искористите његово... контроле приступа и безбедносна правила да дефинише шта сваки корисник може да види или преузме.

Читав овај екосистем пакета, драјвера и конфигурација омогућава Ларавелу да веома удобно ради са Супабејсом, како у аспекту релационих података са Постгресом, тако и у... складиштење датотека и управљање UUID-омПравилним подешавањем кључева, шема и драјвера постижете веома солидну интеграцију која избегава многе типичне грешке које се јављају при покушају ручног повезивања обе платформе и без ових слојева помоћи.

Повезивање Ларавела са Супабејсом за базу података и складиштење, коришћење наменског Супабејс драјвера за беспрекорно управљање UUID-овима и коришћење Флајсистем адаптера за складиштење омогућава вам да креирате модерне апликације где Читава комплексна инфраструктура је капсулирана Иза кулиса чистог Ларавеловог API-ја, од миграција и аутентификације до отпремања датотека у безбедне канте.

Директива blade hastack-а у Laravel-у
Повезани чланак:
Директива Blade hasStack у Laravel-у и напредна контрола стека