tursodatabase / turso-driver-laravel
Laravel的Turso驱动程序
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.1
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- spatie/laravel-ray: ^1.35
README
Turso + Laravel
SQLite用于生产。由libSQL和libSQL 扩展为PHP提供支持。
Turso · 快速入门 · 示例 · 文档 · Discord · 博客 & 教程
Laravel的LibSQL驱动程序
LibSQL是SQLite的一个分支,此包是运行在LibSQL原生扩展/驱动程序/什么的上的第一个LibSQL驱动程序,并支持Laravel生态系统。
要求
在使用此包之前,您需要安装和配置PHP的LibSQL原生扩展。您可以从LibSQL扩展 - 发布下载。
- 根据您的发行版(Linux/Macos/Darwin)下载
- 存档包含扩展和
libsql_php_extension.stubs.php
- 将扩展文件保存在您想要的目录中
- 将
libsql_php_extension.stubs.php
保存在您的项目或任何可以帮助您使用独立的LibSQL驱动程序作为IDE辅助的位置。默认情况下,这个stubs包含在这个包内。 - 配置
php.ini
文件,并添加扩展地址,该地址指向扩展 - 享受!
或者,您可以使用Turso PHP 安装器(仅限Linux和MacOS)来安装libSQL扩展,无需担心。
安装
您可以通过Composer安装此包
composer require tursodatabase/turso-driver-laravel
然后,在bootstrap/providers.php
数组中注册服务提供者
return [ App\Providers\AppServiceProvider::class, Turso\Driver\Laravel\LibSQLDriverServiceProvider::class, // Here ];
环境变量概览
您需要了解.env
文件中的额外配置,这些配置来自Laravel和LibSQL驱动程序。以下是.env
的概览:
Laravel
DB_CONNECTION=libsql DB_DATABASE=database.sqlite
DB_CONNECTION
键代表默认数据库连接,如libsql
、sqlite
、mysql
、mariadb
、pgsql
和sqlsrv
。DB_DATABASE
键代表数据库名称的位置或在此情况下是数据库文件名。
LibSQL驱动程序
DB_AUTH_TOKEN=<your-database-auth-token-from-turso> DB_SYNC_URL=<your-database-url-from-turso> DB_SYNC_INTERVAL=5 DB_READ_YOUR_WRITES=true DB_ENCRYPTION_KEY= DB_REMOTE_ONLY=false
在此处创建新的Turso数据库
DB_AUTH_TOKEN
- 您可以使用turso db tokens create <database-name>
命令生成,或者您可以直接访问Turso仪表板并选择要使用的数据库以生成令牌。DB_SYNC_URL
- 当您创建新的数据库时,Turso会生成此URL,您可以使用此命令turso db show --url <database-name>
获取数据库URL。DB_SYNC_INTERVAL
- 该变量定义了嵌入式副本与主数据库同步的间隔。它为数据库在后台自动同步设置了一个持续时间。当配置后,嵌入式副本将定期将其本地状态与主数据库的状态同步,以确保它拥有最新的数据。这对于确保副本在最小手动干预的情况下保持最新非常有用。默认值为:5秒。DB_READ_YOUR_WRITES
- 此变量配置数据库连接,以确保由连接执行的写入操作立即对由同一连接启动的后续读取操作可见。这在分布式系统中很重要,以确保从写入过程的角度保持一致性。启用后,在执行写入操作后,同一连接后续的任何读取操作都将看到该写入的结果。**此选项通常默认启用**,以确保客户端始终看到其最新的写入。DB_ENCRYPTION_KEY
- 该变量用于指定数据库加密中使用的加密密钥。它代表用于加密和解密数据库内容的密钥,确保存储在数据库中的数据受到保护,并且只能由拥有正确密钥的个人访问。此密钥是静态加密策略的一个关键组成部分,其目标是在数据存储在磁盘上时保护数据,防止未经授权的访问。默认值为:空。DB_REMOTE_ONLY
- 此变量定义为仅使用远程连接,如果您只想从远程数据库读取和写入数据库。默认:false。
配置连接
LibSQL有3种与数据库交互的连接类型:内存连接、本地连接、远程连接和远程副本连接(嵌入式副本)
内存连接
要使用LibSQL内存,就像使用SQLite一样,只需更改以下.env
DB_CONNECTION=libsql DB_DATABASE=:memory:
本地连接
要使用LibSQL本地,就像使用SQLite一样,只需更改以下.env
DB_CONNECTION=libsql DB_DATABASE=database.sqlite
忽略其他LibSQL .env
变量。
远程连接
要仅使用LibSQL远程连接,您可以定义以下.env
变量
DB_CONNECTION=libsql DB_AUTH_TOKEN=<your-database-auth-token-from-turso> DB_SYNC_URL=<your-database-url-from-turso> DB_REMOTE_ONLY=true
远程副本连接(嵌入式副本)
要配置远程副本连接(嵌入式副本),您可以使用以下.env
DB_CONNECTION=libsql DB_DATABASE=database.sqlite DB_AUTH_TOKEN=<your-database-auth-token-from-turso> DB_SYNC_URL=<your-database-url-from-turso> DB_SYNC_INTERVAL=5 DB_READ_YOUR_WRITES=true DB_ENCRYPTION_KEY= DB_REMOTE_ONLY=false
就这样!使用Laravel中的LibSQL驱动程序创建不同的连接有多简单,对吧?!
数据库配置
将此配置添加到config/database.php
中的connections
数组中
'libsql' => [ 'driver' => 'libsql', 'url' => env('DB_DATABASE', database_path('database.sqlite')), 'authToken' => env('DB_AUTH_TOKEN', ''), 'syncUrl' => env('DB_SYNC_URL', ''), 'syncInterval' => env('DB_SYNC_INTERVAL', 5), 'read_your_writes' => env('DB_READ_YOUR_WRITES', true), 'encryptionKey' => env('DB_ENCRYPTION_KEY', ''), 'remoteOnly' => env('DB_REMOTE_ONLY', false), 'database' => null, 'prefix' => '', ],
复制粘贴,不要更改!或者尝试更改它,可能会破坏您的应用程序或给您带来故障。
用法
对于数据库操作的使用,一切都与您使用Illuminate\Support\Facades\DB
在数据库模型中一样。但请记住,这是LibSQL,它们有sync
方法,可以在连接到远程副本连接(嵌入式副本)时使用。
use Illuminate\Support\Facades\DB; // Create DB::table('users')->insert([ 'name' => 'Budi Dalton', 'email' => 'budi.dalton@duck.com' ]); // Read DB::table('users')->get(); DB::table('users')->where('id', 2)->first(); DB::table('users')->orderBy('id', 'DESC')->limit(2)->get(); // Update DB::table('users')->where('id', 2)->update(['name' => 'Doni Mandala']); // Delete DB::table('users')->where('id', 2)->delete(); // Transaction try { DB::beginTransaction(); $updated = DB::table('users')->where('id', 9)->update(['name' => 'Doni Kumala']); if ($updated) { echo "It's updated"; DB::commit(); } else { echo "Not updated"; DB::rollBack(); } $data = DB::table('users')->orderBy('id', 'DESC')->limit(2)->get(); dump($data); } catch (\Exception $e) { DB::rollBack(); echo "An error occurred: " . $e->getMessage(); } // Sync DB::sync();
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
请参阅我们的安全策略,了解如何报告安全漏洞。
鸣谢
许可
麻省理工学院许可证(MIT)。请参阅许可证文件以获取更多信息。