darkterminal/libsql-driver-laravel

此包已被弃用且不再维护。作者建议使用 tursodatabase/turso-driver-laravel 包。

为 Laravel 的 LibSQL 驱动程序

v0.0.1 2024-05-24 03:55 UTC

This package is auto-updated.

Last update: 2024-09-14 04:33:42 UTC


README

此仓库不再维护,已迁移至
官方 Turso Database 仓库下的 Turso Driver Laravel 名称下

Turso + Laravel

Turso + Laravel

生产级 SQLite。由 libSQLlibSQL 扩展 为 PHP 提供。

Turso · 快速入门 · 示例 · 文档 · Discord · 博客 & 指南

为 Laravel 的 LibSQL 驱动程序

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

LibSQL 是 SQLite 的分支,此包是使用 LibSQL 本地扩展/驱动程序/等运行的原生 #1 LibSQL 驱动程序,并支持 Laravel 生态系统。

需求

在使用此包之前,您需要安装和配置 PHP 的 LibSQL 本地扩展。您可以从 LibSQL 扩展 - 发布 下载

  1. 根据您的发行版(Linux/Macos/Darwin)下载
  2. 存档包含扩展和 libsql_php_extension.stubs.php
  3. 将扩展文件保存在您想要的目录中
  4. libsql_php_extension.stubs.php 保存在您的项目或任何可以帮助您使用独立 LibSQL 驱动程序作为 IDE 帮助器的位置。默认情况下,这些 stubs 包含在此包中。
  5. 配置 php.ini 文件并添加扩展地址,该地址指向扩展的相对路径
  6. 享受吧!

安装

您可以通过 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 键表示默认数据库连接,如 libsqlsqlitemysqlmariadbpgsqlsqlsrv
  • 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)。请参阅许可证文件以获取更多信息。