Supabase'i veritabanı ve depolama için Laravel ile nasıl entegre edebilirim?

Son Güncelleme: 5 Aralık 2025
  • Laravel'in Supabase Postgres veritabanını kullanacak şekilde yapılandırılması, sürücü, şema ve ortam değişkenlerinin doğru şekilde ayarlanmasını içerir.
  • Supabase'in Laravel'e özel sürücüsü, sorgularda ve birleştirmelerde UUID sütunlarıyla ilgili yaygın sorunları otomatik olarak çözer.
  • Flysystem adaptörü, Supabase Storage'ı sıradan bir Laravel diski gibi kullanmanıza ve dosya yüklemelerini kolayca entegre etmenize olanak tanır.
  • Ayrıcalıklı hizmet anahtarları ve iyi yapılandırılmış kovalar kullanmak, yazma hatalarından kaçınmak ve istikrarlı bir akış sağlamak için önemlidir.

Laravel için Supabase

Laravel ile çalışıyorsanız ve bu alana adanmışsanız arka uç programlama ve bir veritabanına geçiş yapmak istiyorsunuz Supabase gibi modern, yönetilen PostgreSQLMuhtemelen .env dosyasındaki birkaç değişkeni değiştirmenin yeterli olmadığını fark etmişsinizdir. Bağlantı ayrıntıları, şemalar, kimlik doğrulama ve dosya depolama gibi, ihmal edilirse bazı gizemli hatalara yol açabilecek unsurlar da vardır.

Ayrıca, bir adım daha ileri gitmek ve kullanmak istediğinizde Supabase dosya depolaması olarak Laravel'in depolama sistemiyle entegre edildiğinde, işler biraz daha karmaşık hale geliyor: servis anahtarları, kovalar, uç noktalar, özel Flysystem sürücüleri, vb. İyi haber şu ki, her şey (veritabanı, depolama ve UUID kullanımı) oldukça temiz bir şekilde mükemmel bir şekilde entegre edilebilir.

Laravel'i Supabase veritabanına bağlama

İlk adım, çalışan bir Laravel projesi oluşturmak ve bunu Supabase tarafından sağlanan Postgres veritabanına bağlamaktır. Bunun için, aşağıdaki özelliklere sahip bir ortama ihtiyacınız vardır: PHP ve Composer güncellendi ve yeni bir proje oluşturun veya mevcut bir projeyi kullanın. Konsoldan, tipik Laravel komutuyla projeyi oluşturun ve ardından bağlantıyı kurmaya başlayın.

Projenin iskeletini oluşturduktan sonra, olağan adım basit bir kimlik doğrulama sistemi kurmaktır. Laravel Breeze, şunları içerdiği için çok uygundur: Bıçak şablonları ve temel oturum açma ve kayıt akışıBu, veritabanı bağlantınızın düzgün yapılandırıldığını ve sorunsuz kullanıcı oluşturabildiğinizi hızlı bir şekilde doğrulamanızı sağlar.

Bağlantı ayrıntılarını almak için Supabase panelinize giriş yapın ve yeni bir veritabanı projesi oluşturun (bunu doğrudan şuradan yapabilirsiniz: veritabanı.yeni(Sihirbaza yönlendirir). Henüz bir hesabınız yoksa, önce kayıt ekranını göreceksiniz; zaten bir hesabınız varsa, doğrudan proje ayarlarına ve bağlantı dizesini kontrol edebileceğiniz bölüme gideceksiniz.

Proje sayfasında, bağlantı bölümünde, şuna benzer bir buton bulacaksınız: "Bağlan" veya benzeri. Tıkladığınızda, Supabase size çeşitli bağlantı dizesi biçimleri (URI, bireysel parametreler vb.) gösterir. URI'nin tamamını kopyalayın, ancak şunu unutmayın: şifreyi değiştir Veritabanında gerçekten kullandığınız için, genellikle varsayılan bir tane veya bir yer tutucu görüntülenir.

Bu bilgilerle, Laravel projenizin .env dosyasına gidip DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME ve DB_PASSWORD değişkenlerini güncellemeniz veya tam dize biçimini kullanmayı tercih ediyorsanız DATABASE_URL değişkenini yapılandırmanız gerekir. Amaç, her şeyin Supabase Postgres kümesi ve yerel sunucunuza değil.

Laravel'de Postgres sürücüsünü ve Supabase şemasını yapılandırın

Laravel'de veritabanı yapılandırması için anahtar dosyası config/veritabanı.phpÇerçeveyle birlikte gelen pgsql sürücüsünü doğrudan kullanabilmenize rağmen, Supabase ile çalışırken özellikle şemalar ve Postgres'e özgü seçenekler konusunda bazı ek ayarlamalar uygulamak yaygındır.

Laravel'de Postgres için tipik bir yapılandırma, anahtar altında, bağlantılar dizisi içinde şöyle görünebilir: 'pgsql':

'pgsql' => ,

Buradaki anahtar parametrede arama_yoluSupabase, varsayılan olarak API'leri aracılığıyla kullanıma sunulan genel şemayı kullanır. Laravel uygulamanızı bu şemadan ayrı tutmak ve tablo veya politika çakışmalarından kaçınmak istiyorsanız, örneğin search_path değerini kendi şemanızla değiştirmeniz şiddetle tavsiye edilir. LaravelÖnceki örnekte görüldüğü gibi.

Bu şekilde, projeniz tarafından oluşturulan geçişler ve tablolar, genel kullanıma açık değil, söz konusu alternatif şemada oluşturulacaktır. Bu ayrım, yönetimi çok daha kolay hale getirir. güvenlik kuralları, RLS ve Supabase panelinden erişim Hiçbir şeye basmadan ve veritabanı yapısını düzenli tutarak.

  Yazılım Geliştirme Yaşam Döngüsü: Her Aşamayı Optimize Etmek İçin Stratejiler

Yapılandırma dosyasını ayarladıktan sonra, her zamanki Laravel komutlarını kullanarak geçişleri başlatabilirsiniz. Bu, kimlik doğrulama tablolarını ve tanımladığınız diğer tabloları oluşturacaktır. Her şey doğru şekilde yapılandırılırsa, komutlar aşağıdakilere karşı çalışacaktır: Supabase Postgres başka hiçbir şey yapmanıza gerek kalmadan.

Göçler tamamlandıktan sonra, geliştirme sunucusunu `artisan serve` ile başlatın ve kullanıcıları kaydedip oturum açmayı deneyin. Bağlantı veya göç hatası görünmüyorsa, Laravel çalışıyor demektir. Supabase ile doğru iletişim kurmak ve yapabilirsin iş mantığınızı oluşturmaya devam edin normalde.

Laravel'de belirli bir Supabase sürücüsünü kullanma

Standart pgsql sürücüsü çalışsa da, bir paket ekleniyor Laravel için supabase veritabanı sürücüsüPostgreSQL'in davranışını, özellikle UUID sütunlarının işlenmesi ve sorguların oluşturulma şekliyle ilgili çok faydalı iyileştirmelerle genişletiyor.

Prahsys/laravel-supabase olarak dağıtılan bu paket, Composer aracılığıyla yüklenir ve config/database.php dosyanızda kullanabileceğiniz supabase adlı ek bir sürücü kaydeder. Dahili olarak Laravel'in Postgres sürücüsüne dayanır, ancak şunları içerir: ayarlar ve arama dilbilgisi Belirli Supabase ortamı için optimize edilmiştir.

Kurulduktan sonra, aşağıdakine benzer bir şey beyan edebilirsiniz: bağlantılar bölümü:

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

Bu sürücüyü kullanmanın avantajı, Postgres motorunun tüm gücünden yararlanmaya devam etmeniz, ancak aynı zamanda özellikle şu komutlarla çalışırken Supabase'in belirli hassas ayrıntılarını otomatik olarak işlemesidir: UUID'ler birincil anahtarlar veya ilişki alanları olarakBu, her karmaşık sorgu için dökümü manuel olarak yazmak zorunda kalmanızı önler.

Paket ayrıca, çerçevenin ve PHP'nin modern sürümleriyle uyumlu olacak şekilde tasarlanmıştır ve resmi uyumluluk sunar Laravel 10.x, 11.x, 12.x ve PHP 8.1 sürümünden itibaren, ayrıca Supabase de dahil olmak üzere herhangi bir standart PostgreSQL veri tabanıyla.

Her şeyin doğru çalıştığından emin olmak için pakette bir dizi otomatik test bulunur. Hız için bellek içi bir SQLite veritabanı kullanan `composer test` komutuyla testleri çalıştırabilir veya Supabase'inize işaret eden bir `.env.testing` dosyası hazırlayıp `composer test-supabase` komutunu çalıştırarak davranışı gerçek dünya ortamında doğrulayabilirsiniz. Uzak Postgres.

Supabase ve Laravel'de UUID yönetimi

Supabase'in UUID sütunlarıyla ilgili bir tuhaflığı vardır: Bir UUID'yi doğrudan bir metin dizesiyle dönüştürmeden karşılaştırmaya çalışırsanız, sorgu başarısız olmak veya beklenmeyen sonuçlar döndürmek"Düz" bir Postgres'te bunu genel dönüşümler veya özel operatörlerle çözebilirdiniz, ancak Supabase'de bu genel özelleştirmelere izin verilmez.

Bu ima eder doğrudan bir stil sorgulamasından daha iyidir:

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

işe yaramayacak Beklediğiniz gibi. Ancak, açık döküm işlemini gerçekleştirirseniz:

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

Sorgu başarılı. Sorun şu ki Laravel'de, Eloquent veya sorgu oluşturucu ile sorgu yazdığınızda, her yere CAST koyarakİşte tam bu noktada, bahsi geçen paketteki supabase sürücüsü devreye giriyor ve bu kadroları sizin için ekleme işini üstleniyor.

Bu sürücü aktif olduğunda, şunları yapabilirsiniz: yaygın sorular gibi:

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

Ve sadece doğrudan istişarelerde değil, aynı zamanda katıldıÖrneğin, gönderileri almak ve bunları UUID alanını kullanarak kullanıcılar tablosuyla birleştirmek istiyorsanız, şöyle bir şey yapabilirsiniz:

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

Sürücü, aşağıdakilerin uygulanmasından sorumludur: metin için gereken dökümler İlgili UUID sütunlarına şeffaf bir şekilde. Bu sayede kodunuz Laravel'e özgü kalır ve her karmaşık sorguda ham SQL yazmanıza veya garip numaralar kullanmanıza gerek kalmaz.

  Python ve Veritabanları: Başlangıç ​​için En İyi Rehber

Hangi sütunların UUID olarak kabul edileceği konusunda daha hassas bir denetim istiyorsanız, paket şu özelliği sunar: CastsUuidColumns Eloquent modelleriniz için. Bunu model sınıfında kullanın ve ek sütunlardan oluşan korumalı bir dizi tanımlayın:

use Prahsys\Supabase\Traits\CastsUuidColumns;

class Post extends Model
{
    use CastsUuidColumns;

    protected $uuidColumns = ;
}

Bu özellik üç önemli şey yapar: birincil anahtarı varsayılan olarak UUID olarak içerir ve özellikte bildirdiğiniz herhangi bir sütunu ekler. $uuidSütunları ve bu bilgiyi sorgu oluşturucuya iletir, böylece tür dönüşümlerinin nereye uygulanacağını bilir. Böylece, UUID'leri içeren tüm veri erişimi tutarlı ve otomatik.

Daha da ileri vakalar içinÖzel bir UUID sütun algılayıcısı kaydedebilirsiniz. PostgresGrammar paketini kullanarak, sütun adına veya sorgu bağlamına bağlı olarak UUID olarak ele alınıp alınmayacağına karar veren bir geri çağırma işlevi belirtebilirsiniz. Örneğin:

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

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

Bu fonksiyon kurulduğunda, sistem belirli bir kalıba sahip veya belirli bir liste içerisinde yer alan tüm sütunları UUID olarak kabul edebilir ve çok özel adlandırma kuralları projenizin.

Supabase Storage'ı Laravel'de bir dosya sistemi olarak entegre edin

Veritabanına ek olarak, birçok projenin kullanıcılar tarafından yüklenen görselleri, belgeleri veya diğer dosyaları depolaması gerekir. Supabase, kullanabileceğiniz kova tabanlı bir depolama hizmeti içerir. Flysystem kullanarak Laravel diskiBu amaçla, Supabase Storage'ın config/filesystems.php içerisinde başka bir sürücü gibi ele alınmasını sağlayan özel bir adaptör bulunmaktadır.

Söz konusu paket, çerçevenin Depolama sistemiyle şeffaf bir şekilde entegre olan bir Flysystem adaptörü sağlar. Aşağıdakilerin minimum gereksinimlerini karşılar: PHP >= 8.1, Laravel 10.x veya 11.x ve Laravel'in dosya yönetimi için önerdiği PHP fileinfo uzantısı (ext-fileinfo). Kurulum Composer ile yapılır ve eklendikten sonra, yapılandırmada yalnızca supabase diskini tanımlamanız gerekir.

Dosyanın içinde config/dosyasistemleri.phpDizi diskleri içerisine aşağıdakine benzer bir şey ekleyebilirsiniz:

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

Kova parametresi genellikle basitçe şudur: depolama kovası adı Supabase panelinde oluşturduğunuz (örneğin, myapp-file-uploads). Uç nokta, projenin depolama hizmetinin temel URL'sidir ve panelin ilgili bölümünde de görünür ve genellikle proje URL'si ve bölgesinden türetilir.

`public` seçeneği, kovanın içeriğinin varsayılan olarak public olarak işlenip işlenmeyeceğini belirtir. `true` ise, bağdaştırıcı özel bir imza olmadan erişilebilir URL'ler oluşturur; `false` ise, `defaultUrlGeneration` seçeneği devreye girer ve bu seçenek, `signedUrlExpires` ile belirtilen bir son kullanma tarihine sahip imzalı URL'lerin oluşturulmasını zorunlu kılar. Bu yapılandırma, yükü dengelemenize olanak tanır. güvenlik ve konfor işlediğiniz dosya türüne bağlı olarak.

Genel disk URL'si normalde boş bırakılır, böylece bağdaştırıcı bunu uç noktadan otomatik olarak türetir. Yalnızca bir proxy veya ara CDN ve oluşturulan rotaların yerel Supabase etki alanı yerine bu etki alanına işaret etmesini istiyorsunuz.

Yükleme hatalarını giderin ve Supabase Depolama'nın anahtarını anlayın

Laravel'den Supabase Storage'a dosya yüklemeye çalışırken oldukça yaygın bir sorun şu tür mesajlar almaktır: “Şu konumdaki dosya yazılamıyor: uploads/…”Bu genellikle, sürücü yapılandırılmış olmasına rağmen Supabase'in yetersiz izinler veya yanlış yapılandırılmış bir anahtar nedeniyle yazma işlemini reddettiğini gösterir.

config/filesystems.php dosyasının alt taban diskinde, yapılandırma şunu kullanarak belirtiliyor: "imtiyazlı anahtar" Anahtar alanında, salt okunur bir anahtarın çalışmayacağını açıkça belirten bir ifade yer alıyor. Bu, istemci için tasarlanmış genel bir API anahtarı veya değişiklik izinleri olmayan S3 uyumluluğu için tasarlanmış bir anahtar değil, kova üzerinde yazma izinlerine sahip bir hizmet anahtarı kullanmanız gerektiği anlamına gelir.

Supabase panelinde, API ve depolama yapılandırması bölümünde hem anonim anahtarları hem de hizmet_rolü veya eşdeğeriBunlar genişletilmiş ayrıcalıklara sahip olanlardır. SUPABASE_SECRET_ACCESS_KEY değişkenine yerleştirmeniz gereken anahtar, genel anahtar değil, bu hizmet anahtarıdır. Sürücü daha sonra bunu env('SUPABASE_SECRET_ACCESS_KEY') aracılığıyla okuyacaktır.

  API'ler için aktif savunma ve güvenlik açığı tarayıcısı

Depolama yapılandırmasındaki S3 anahtarıyla veya projedeki genel API anahtarlarıyla test yaptıysanız, bu kimlik bilgilerinin belirli kovaya yazma iznine sahip olmaması ve bunun yazma hatasına yol açması çok olasıdır. Anahtar değerini bir yazma izinlerine sahip geçerli hizmet anahtarı Ve kovanın var olduğunu ve doğru yazıldığını doğrulayarak, sorun genellikle çözülür.

Anahtara ek olarak, SUPABASE_STORAGE_BUCKET'ta tanımlanan kovanın, Supabase arayüzünde oluşturulan kovayla büyük ve küçük harflere saygı göstererek tam olarak eşleştiğini ve uç noktanın söz konusu depolama örneği için doğru URL'ye karşılık geldiğini doğrulamak önemlidir. Ek bir karakter veya hatalı alan adı gibi bir ayrıntı, bağdaştırıcının çalışmasını engelleyebilir. dosyaların gerçek hedefini bulun.

Laravel Breeze, Blade ve Supabase Depolama ile İş Akışı

Veritabanınızı ve depolamanızı kurduktan sonraki doğal adım, her şeyi sisteminizle entegre etmektir. Laravel Breeze arayüzü ve Blade şablonlarıBu sayede kullanıcılar Laravel ekosisteminden ayrılmadan Supabase'e kayıt olabilir, kimlik doğrulaması yapabilir ve dosya yükleyebilir.

Denetleyicileriniz içinde şunları kullanırsınız: Depolama cephesi Örneğin, bir formdan alınan ve dosya girişi içeren bir dosyayı yüklemek için şöyle bir şey yapabilirsiniz:

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

Bu kod Laravel'e diski kullanmasını söyler supabaz ve dosyayı yapılandırılmış kova içindeki sanal yüklemeler klasörüne yerleştirin. Anahtar ve uç nokta doğruysa, dosya Supabase depolama alanına yüklenir ve standart depolama yöntemlerini kullanarak yolunu alabilir veya genel ya da imzalı URL'ler oluşturabilirsiniz.

Bu yaklaşımın avantajı, uygulamanızın yerel disk, Amazon S3, Supabase veya desteklenen başka bir hizmeti kullanıp kullanmadığına bakılmaksızın depolama için tek bir arayüz korumasıdır. Sağlayıcı değiştirme işlemi azalır config/filesystems.php dosyasını ayarlayın ve iş mantığına dokunmadan ortam değişkenlerini değiştiriyoruz.

Bunu Blade ve Breeze ile birleştirerek, yükleme formlarını, dosya listelerini ve indirme bağlantılarını uygulamanızın kullanıcı deneyimine tamamen entegre bir şekilde sunabilirsiniz. Ayrıca, Supabase Storage'ın kova ve politika tabanlı yaklaşımı, erişim kontrolleri ve güvenlik kuralları Her kullanıcının neleri görebileceğini veya indirebileceğini tanımlamak için.

Paketler, sürücüler ve yapılandırmalardan oluşan bu ekosistem, Laravel'in Supabase ile hem Postgres ile ilişkisel veri açısından hem de... dosya depolama ve UUID yönetimiAnahtarları, şemaları ve sürücüleri düzgün bir şekilde ayarlayarak, her iki platformu manuel olarak ve bu yardım katmanları olmadan bağlamaya çalışırken ortaya çıkan tipik hataların çoğundan kaçınan çok sağlam bir entegrasyon elde edersiniz.

Laravel'i veritabanı ve depolama için Supabase ile bağlamak, UUID'leri sorunsuz bir şekilde yönetmek için özel Supabase sürücüsünden yararlanmak ve depolama için Flysystem adaptörünü kullanmak, modern uygulamalar oluşturmanıza olanak tanır. Tüm karmaşık altyapı kapsüllenmiştir Laravel'in temiz API'sinin perde arkası, göçlerden ve kimlik doğrulamadan dosyaların güvenli kovalara yüklenmesine kadar.

laravel'deki blade hastack yönergesi
İlgili makale:
Laravel'de Blade yönergesi hasStack ve gelişmiş yığın kontrolü