Bagaimana untuk mengintegrasikan Supabase dengan Laravel untuk pangkalan data dan storan

Kemaskini terakhir: 5 Disember 2025
Pengarang TecnoDigital
  • Mengkonfigurasi Laravel untuk menggunakan pangkalan data Supabase Postgres melibatkan pelarasan pembolehubah pemacu, skema dan persekitaran dengan betul.
  • Pemacu khusus Supabase untuk Laravel secara automatik menyelesaikan masalah biasa dengan lajur UUID dalam pertanyaan dan gabungan.
  • Penyesuai Flysystem membolehkan anda menganggap Storan Supabase sebagai satu lagi cakera Laravel, dengan mudah menyepadukan muat naik fail.
  • Menggunakan kunci perkhidmatan istimewa dan baldi yang dikonfigurasikan dengan baik adalah kunci untuk mengelakkan ralat tulis dan memastikan aliran yang stabil.

Supabase untuk Laravel

Jika anda bekerja dengan Laravel dan berdedikasi untuk pengaturcaraan bahagian belakang dan anda berasa seperti membuat lompatan ke pangkalan data PostgreSQL terurus dan moden seperti SupabaseAnda mungkin perasan bahawa tidak cukup dengan hanya menukar beberapa pembolehubah dalam fail .env. Terdapat butiran sambungan, skema, pengesahan dan storan fail yang, jika diabaikan, boleh membawa kepada beberapa ralat yang agak samar.

Tambahan pula, apabila anda ingin melangkah lebih jauh dan menggunakan Supabase sebagai storan fail Apabila disepadukan dengan sistem storan Laravel, perkara menjadi lebih kompleks: kunci perkhidmatan, baldi, titik akhir, pemacu Flysystem tersuai, dsb. Berita baiknya ialah segala-galanya—pangkalan data, storan dan pengendalian UUID—boleh disepadukan dengan sempurna dalam cara yang agak bersih.

Menyambungkan Laravel ke pangkalan data Supabase

Langkah pertama ialah mempunyai projek Laravel yang berfungsi dan memautkannya ke pangkalan data Postgres yang disediakan oleh Supabase. Untuk ini, anda memerlukan persekitaran dengan PHP dan Komposer dikemas kini dan buat projek baharu atau gunakan projek sedia ada. Dari konsol, hanya jana projek dengan arahan Laravel biasa dan kemudian mula menyediakan sambungan.

Sebaik sahaja anda mempunyai rangka projek, langkah biasa ialah memasang sistem pengesahan mudah. Laravel Breeze sangat sesuai kerana ia termasuk Templat bilah dan aliran log masuk dan pendaftaran asasIni membolehkan anda mengesahkan dengan cepat bahawa sambungan pangkalan data anda dikonfigurasikan dengan betul dan anda boleh membuat pengguna tanpa masalah.

Untuk mendapatkan butiran sambungan, log masuk ke panel Supabase anda dan buat projek pangkalan data baharu (anda boleh melakukannya terus dari pangkalan data.baru(yang mengubah hala ke wizard). Jika anda belum mempunyai akaun lagi, anda akan melihat skrin pendaftaran dahulu; jika anda sudah mempunyai satu, anda akan pergi terus ke tetapan projek dan bahagian yang anda boleh menyemak rentetan sambungan.

Dalam halaman projek, di bahagian sambungan, anda akan menemui butang seperti "Sambung" atau serupa. Apabila anda mengkliknya, Supabase menunjukkan kepada anda beberapa format rentetan sambungan (URI, parameter individu, dsb.). Salin URI yang lengkap, tetapi ingat bahawa anda mesti menggantikan kata laluan untuk yang sebenarnya anda gunakan dalam pangkalan data, kerana satu lalai atau pemegang tempat sering dipaparkan.

Dengan maklumat itu, anda perlu pergi ke fail .env projek Laravel anda dan mengemas kini pembolehubah DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME dan DB_PASSWORD, atau konfigurasikan pembolehubah DATABASE_URL jika anda lebih suka menggunakan format rentetan penuh. Matlamatnya adalah untuk segala-galanya menunjuk kepada Kelompok Supabase Postgres dan bukan kepada localhost anda.

Konfigurasikan pemacu Postgres dan skema Supabase dalam Laravel

Dalam Laravel, fail utama untuk konfigurasi pangkalan data ialah config/database.phpWalaupun anda boleh terus menggunakan pemacu pgsql yang disertakan dengan rangka kerja, apabila bekerja dengan Supabase adalah perkara biasa untuk menggunakan beberapa pelarasan tambahan, terutamanya mengenai skema dan pilihan khusus Postgres.

Konfigurasi biasa untuk Postgres dalam Laravel mungkin kelihatan seperti ini, dalam tatasusunan sambungan, di bawah kunci 'pgsql':

'pgsql' => ,

Kunci di sini adalah dalam parameter laluan_carianSupabase, secara lalai, menggunakan skema awam, iaitu skema yang didedahkan melalui APInya. Jika anda ingin memastikan aplikasi Laravel anda berasingan daripada skema itu dan mengelakkan konflik jadual atau dasar, adalah sangat disyorkan untuk menukar laluan carian kepada skema anda sendiri, contohnya. laravel, seperti yang dilihat dalam contoh sebelumnya.

Dengan cara ini, migrasi dan jadual yang dijana oleh projek anda akan dibuat dalam skema alternatif itu dan bukan secara terbuka. Pemisahan ini menjadikan pengurusan lebih mudah. peraturan keselamatan, RLS dan akses daripada panel Supabase tanpa memijak apa-apa yang anda tidak sepatutnya dan memastikan struktur pangkalan data teratur.

  Bahasa Pengaturcaraan Cobol: Gambaran Keseluruhan Lengkap

Setelah anda melaraskan fail konfigurasi, anda boleh melancarkan migrasi menggunakan arahan Laravel biasa. Ini akan mencipta jadual pengesahan dan mana-mana jadual lain yang telah anda tentukan. Jika semuanya dikonfigurasikan dengan betul, arahan akan dijalankan terhadap Supabase Postgres tanpa anda perlu melakukan apa-apa lagi.

Setelah migrasi selesai, mulakan pelayan pembangunan dengan `artisan serve` dan cuba daftar dan log masuk pengguna. Jika tiada sambungan atau ralat migrasi muncul, ini bermakna Laravel berfungsi. berkomunikasi dengan betul dengan Supabase dan anda boleh teruskan membina logik perniagaan anda biasanya.

Menggunakan pemacu Supabase tertentu dalam Laravel

Walaupun pemacu pgsql standard berfungsi, terdapat pakej yang menambah a pemacu pangkalan data supabase untuk Laravel, memanjangkan tingkah laku PostgreSQL dengan penambahbaikan yang sangat berguna, terutamanya mengenai pengendalian lajur UUID dan cara pertanyaan dibina.

Pakej ini, diedarkan sebagai prahsys/laravel-supabase, dipasang melalui Composer dan mendaftarkan pemacu tambahan yang dipanggil supabase yang boleh anda gunakan dalam fail config/database.php anda. Secara dalaman, ia berdasarkan pemacu Postgres Laravel, tetapi digabungkan tetapan dan tatabahasa carian dioptimumkan untuk persekitaran Supabase tertentu.

Setelah dipasang, anda boleh mengisytiharkan sesuatu seperti berikut dalam bahagian sambungan:

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

Kelebihan menggunakan pemacu ini ialah anda masih mendapat semua kuasa enjin Postgres, tetapi ia juga secara automatik mengendalikan butiran terperinci tertentu Supabase, terutamanya apabila bekerja dengan UUID sebagai kunci utama atau medan perhubunganIni mengelakkan daripada menulis penghantaran secara manual untuk setiap pertanyaan rumit.

Pakej ini juga direka bentuk agar sesuai dengan versi moden rangka kerja dan PHP, menawarkan keserasian rasmi dengan Laravel 10.x, 11.x, 12.x dan dengan PHP dari versi 8.1 dan seterusnya, serta mana-mana pangkalan data PostgreSQL standard, termasuk sudah tentu Supabase.

Untuk memastikan semuanya berfungsi dengan betul, pakej tersebut termasuk set ujian automatik. Anda boleh menjalankan ujian dengan arahan `composer test`, yang akan menggunakan pangkalan data SQLite dalam memori untuk kelajuan, atau menyediakan fail `.env.testing` yang menghala ke Supabase anda dan menjalankan `composer test-supabase` untuk mengesahkan tingkah laku dalam persekitaran dunia sebenar. Postgres Jauh.

Pengurusan UUID dalam Supabase dan Laravel

Supabase mempunyai keanehan dengan lajur UUID: jika anda cuba membandingkan UUID secara langsung dengan rentetan teks tanpa menghantar, pertanyaan mungkin gagal atau mengembalikan hasil yang tidak dijangkaDalam sistem Postgres "biasa" anda boleh menyelesaikannya dengan cast global atau operator tersuai, tetapi dalam Supabase penyesuaian global ini tidak dibenarkan.

Ini bermakna daripada pertanyaan langsung tentang gaya:

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

Ia tidak akan berfungsi seperti yang anda jangkakan. Walau bagaimanapun, jika anda menjalankan pemutus eksplisit:

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

Pertanyaan itu berjaya. Masalahnya ialah dalam Laravel, apabila anda menulis pertanyaan dengan Eloquent atau pembina pertanyaan, anda tidak mahu pergi meletakkan CAST di setiap tempatDi situlah pemacu supabase daripada pakej yang disebutkan di atas memainkan peranan, yang menguruskan penambahan pelakon tersebut untuk anda.

Dengan pemandu itu aktif, anda boleh melakukan pertanyaan biasa sebagai:

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

Dan bukan sahaja dalam perundingan langsung, tetapi juga dalam menyertaiSebagai contoh, jika anda ingin mendapatkan semula siaran dan menyertainya dengan jadual pengguna menggunakan medan UUID, anda boleh melakukan sesuatu seperti ini:

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

Pemandu bertanggungjawab untuk memohon pelakon yang diperlukan untuk menghantar teks dalam lajur UUID yang berkaitan, secara telus. Dengan cara ini, kod anda kekal idiomatik untuk Laravel, dan anda tidak perlu menulis SQL mentah atau menggunakan helah pelik dalam setiap pertanyaan kompleks.

  Faedah pembangunan perisian tersuai

Jika anda mahukan kawalan yang lebih baik ke atas lajur yang dianggap sebagai UUID, pakej tersebut menawarkan ciri tersebut CastsUuidColumns untuk model Eloquent anda. Hanya gunakannya dalam kelas model dan tentukan tatasusunan lajur tambahan yang dilindungi:

use Prahsys\Supabase\Traits\CastsUuidColumns;

class Post extends Model
{
    use CastsUuidColumns;

    protected $uuidColumns = ;
}

Ciri ini melakukan tiga perkara penting: ia termasuk kunci utama sebagai UUID secara lalai, dan ia menambahkan mana-mana lajur yang anda isytiharkan dalam harta itu. $uuidColumns dan menyampaikan maklumat tersebut kepada pembina pertanyaan supaya ia mengetahui tempat untuk menggunakan pemutus. Oleh itu, semua akses data yang melibatkan UUID menjadi konsisten dan automatik.

Untuk kes yang lebih lanjutAnda boleh mendaftar pengesan lajur UUID tersuai. Menggunakan pakej PostgresGrammar, anda boleh menentukan fungsi panggil balik yang, berdasarkan nama lajur atau konteks pertanyaan, memutuskan sama ada ia harus dianggap sebagai UUID. Contohnya:

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

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

Dengan fungsi ini ditubuhkan, sistem boleh menganggap sebagai UUID semua lajur yang namanya mempunyai corak tertentu atau berada dalam senarai tertentu, menyesuaikan diri dengan konvensyen penamaan yang sangat spesifik projek anda.

Integrasikan Storan Supabase sebagai sistem fail dalam Laravel

Selain pangkalan data, banyak projek perlu menyimpan imej, dokumen atau fail lain yang dimuat naik oleh pengguna. Supabase termasuk perkhidmatan storan berasaskan baldi yang boleh anda manfaatkan sebagai Cakera laravel menggunakan FlysystemUntuk tujuan ini, terdapat penyesuai khusus yang membenarkan Storan Supabase dianggap sebagai pemacu lain dalam config/filesystems.php.

Pakej yang dimaksudkan menyediakan penyesuai Flysystem yang menyepadukan secara telus dengan sistem Storan rangka kerja. Ia memenuhi keperluan minimum PHP >= 8.1, Laravel 10.x atau 11.x dan sambungan info fail PHP (ext-fileinfo), yang Laravel sudah mengesyorkan untuk mengendalikan fail. Pemasangan dilakukan dengan Composer, dan setelah disertakan, anda hanya perlu menentukan cakera supabase dalam konfigurasi.

Dalam Fail config/filesystems.phpDalam cakera tatasusunan, anda akan menambah sesuatu yang serupa dengan yang berikut:

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

Parameter baldi biasanya hanya nama baldi simpanan yang anda buat dalam panel Supabase (contohnya, myapp-file-uploads). Titik akhir ialah URL asas perkhidmatan storan projek, juga boleh dilihat dalam bahagian panel yang sepadan, dan biasanya diperoleh daripada URL dan wilayah projek.

Pilihan `awam` menunjukkan sama ada kandungan baldi akan dianggap sebagai awam secara lalai. Jika `benar`, penyesuai akan menjana URL yang boleh diakses tanpa tandatangan khas; jika `false`, pilihan `defaultUrlGeneration` akan dimainkan, yang boleh memaksa penjanaan URL yang ditandatangani dengan masa tamat tempoh yang ditentukan oleh `signedUrlExpires`. Konfigurasi ini membolehkan anda mengimbangi beban. keselamatan dan keselesaan bergantung pada jenis fail yang anda kendalikan.

URL cakera umum biasanya dibiarkan sebagai nol supaya penyesuai secara automatik memperolehnya dari titik akhir. Anda hanya perlu menyentuhnya jika anda menggunakan a proksi atau CDN perantaraan dan anda mahu laluan yang dijana menghala ke domain itu dan bukannya domain Supabase asli.

Selesaikan masalah ralat muat naik dan fahami kunci kepada Storan Supabase

Masalah yang agak biasa apabila cuba memuat naik fail ke Storan Supabase daripada Laravel ialah menerima mesej seperti “Tidak dapat menulis fail di lokasi: muat naik/…”Ini biasanya menunjukkan bahawa, walaupun pemacu dikonfigurasikan, Supabase menafikan operasi tulis kerana kebenaran yang tidak mencukupi atau kunci yang salah konfigurasi.

Dalam cakera supabase config/filesystems.php, konfigurasi menyebut menggunakan "kunci istimewa" dalam medan kunci, dengan jelas menyatakan bahawa kunci baca sahaja tidak akan berfungsi. Ini bermakna anda perlu menggunakan kunci perkhidmatan yang mempunyai kebenaran menulis pada baldi, bukan sekadar kunci API awam yang ditujukan untuk klien atau kunci yang bertujuan untuk keserasian S3 tanpa kebenaran pengubahsuaian.

Dalam panel Supabase, dalam bahagian konfigurasi API dan storan, anda akan menemui kedua-dua kunci tanpa nama dan perkhidmatan_peranan atau setaraIni adalah mereka yang mempunyai keistimewaan yang diperluaskan. Kunci perkhidmatan itu, dan bukan yang awam, yang anda harus letakkan dalam pembolehubah SUPABASE_SECRET_ACCESS_KEY, yang kemudiannya akan dibaca oleh pemandu melalui env('SUPABASE_SECRET_ACCESS_KEY').

  Kepentingan pangkalan data dalam dunia perniagaan

Jika anda telah menguji dengan kunci S3 daripada konfigurasi storan atau dengan kunci API generik daripada projek, kemungkinan besar bukti kelayakan tersebut tidak mempunyai kebenaran untuk menulis ke baldi tertentu, mengakibatkan ralat tulis. Menukar nilai kunci kepada a kunci perkhidmatan yang sah dengan kebenaran menulis Dan dengan mengesahkan bahawa baldi itu wujud dan ditulis dengan betul, masalah itu biasanya diselesaikan.

Sebagai tambahan kepada kunci, adalah penting untuk mengesahkan bahawa baldi yang ditakrifkan dalam SUPABASE_STORAGE_BUCKET betul-betul sepadan dengan yang dibuat dalam antara muka Supabase, mengikut huruf besar dan huruf kecil, dan bahawa titik akhir sepadan dengan URL yang betul untuk contoh storan itu. Butiran seperti aksara tambahan atau domain yang salah boleh menghalang penyesuai daripada berfungsi. cari destinasi sebenar fail.

Aliran kerja dengan Laravel Breeze, Blade dan Storan Supabase

Sebaik sahaja anda menyediakan pangkalan data dan storan anda, langkah semula jadi seterusnya ialah menyepadukan segala-galanya dengan anda Antara muka Laravel Breeze dan templat BladeDengan cara ini, pengguna boleh mendaftar, mengesahkan dan memuat naik fail ke Supabase tanpa meninggalkan ekosistem Laravel.

Dalam pengawal anda, anda akan menggunakan Fasad simpanan menunjuk ke cakera supabase. Contohnya, untuk memuat naik fail yang diterima daripada borang dengan input fail, anda boleh melakukan sesuatu seperti:

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

Kod ini memberitahu Laravel untuk menggunakan cakera supabase dan letakkan fail di dalam folder muat naik maya dalam baldi yang dikonfigurasikan. Jika kunci dan titik akhir adalah betul, fail akan dimuat naik ke storan Supabase dan anda boleh mendapatkan semula laluannya atau menjana URL awam atau bertandatangan menggunakan kaedah storan standard.

Kelebihan pendekatan ini ialah aplikasi anda mengekalkan antara muka tunggal untuk storan, tidak kira sama ada ia menggunakan cakera setempat, Amazon S3, Supabase atau perkhidmatan lain yang disokong. Bertukar pembekal dikurangkan kepada laraskan konfigurasi/sistem fail.php dan pembolehubah persekitaran, tanpa menyentuh logik perniagaan.

Dengan menggabungkan ini dengan Blade dan Breeze, anda boleh menawarkan borang muat naik, penyenaraian fail dan pautan muat turun disepadukan sepenuhnya ke dalam pengalaman pengguna aplikasi anda. Tambahan pula, pendekatan berasaskan baldi dan dasar Supabase Storage membolehkan anda memanfaatkannya kawalan akses dan peraturan keselamatan untuk menentukan perkara yang boleh dilihat atau dimuat turun oleh setiap pengguna.

Keseluruhan ekosistem pakej, pemacu dan konfigurasi ini membolehkan Laravel berfungsi dengan sangat selesa dengan Supabase, kedua-dua dalam aspek data hubungan dengan Postgres dan dalam... penyimpanan fail dan pengurusan UUIDDengan melaraskan kekunci, skema dan pemacu dengan betul, anda mencapai penyepaduan yang sangat kukuh yang mengelakkan banyak ralat biasa yang berlaku apabila cuba menyambungkan kedua-dua platform secara manual dan tanpa lapisan bantuan ini.

Menyambung Laravel dengan Supabase untuk pangkalan data dan storan, memanfaatkan pemacu Supabase khusus untuk mengurus UUID dengan lancar, dan menggunakan penyesuai Flysystem untuk storan membolehkan anda membina aplikasi moden di mana Keseluruhan infrastruktur kompleks dirangkumkan Di sebalik tabir API Laravel yang bersih, daripada migrasi dan pengesahan kepada memuat naik fail ke baldi selamat.

arahan hastack bilah dalam laravel
Artikel berkaitan:
Arahan bilah mempunyaiStack dalam Laravel dan kawalan tindanan lanjutan