darkterminal / libsql-driver-laravel
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.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- spatie/laravel-ray: ^1.35
README
此仓库不再维护,已迁移至
官方 Turso Database 仓库下的 Turso Driver Laravel 名称下
Turso + Laravel
生产级 SQLite。由 libSQL 和 libSQL 扩展 为 PHP 提供。
Turso · 快速入门 · 示例 · 文档 · Discord · 博客 & 指南
为 Laravel 的 LibSQL 驱动程序
LibSQL 是 SQLite 的分支,此包是使用 LibSQL 本地扩展/驱动程序/等运行的原生 #1 LibSQL 驱动程序,并支持 Laravel 生态系统。
需求
在使用此包之前,您需要安装和配置 PHP 的 LibSQL 本地扩展。您可以从 LibSQL 扩展 - 发布 下载
- 根据您的发行版(Linux/Macos/Darwin)下载
- 存档包含扩展和
libsql_php_extension.stubs.php
- 将扩展文件保存在您想要的目录中
- 将
libsql_php_extension.stubs.php
保存在您的项目或任何可以帮助您使用独立 LibSQL 驱动程序作为 IDE 帮助器的位置。默认情况下,这些 stubs 包含在此包中。 - 配置
php.ini
文件并添加扩展地址,该地址指向扩展的相对路径 - 享受吧!
安装
您可以通过 composer 安装此包
composer require darkterminal/libsql-driver-laravel
您可以使用此命令发布包供应商
php artisan vendor:publish --tag=libsql-driver-laravel
环境变量概述
您需要了解 .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,你可以使用以下命令获取数据库URL:turso db show --url <database-name>
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' => 'file:' . 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::connection('libsql')->table('users')->craete([ 'name' => 'Budi Dalton', 'email' => 'budi.dalton@duck.com' ]); // Read DB::connection('libsql')->table('users')->get(); DB::connection('libsql')->table('users')->where('id', 2)->first(); DB::connection('libsql')->table('users')->orderBy('id', 'DESC')->limit(2)->get(); // Update DB::connection('libsql')->table('users')->where('id', 2)->update(['name' => 'Doni Mandala']); // Delete DB::connection('libsql')->table('users')->where('id', 2)->delete(); // Transaction try { DB::beginTransaction(); $updated = DB::connection('libsql')->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::connection('libsql')->table('users')->orderBy('id', 'DESC')->limit(2)->get(); dump($data); } catch (\Exception $e) { DB::rollBack(); echo "An error occurred: " . $e->getMessage(); } // Sync DB::connection('libsql')->sync();
更新日志
请参阅更新日志以获取有关最近更改的更多信息。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请参阅我们的安全策略了解如何报告安全漏洞。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。