nielspeen / rqlite-laravel-driver
RQLite 的 Laravel 驱动器
1.0
2024-07-01 23:13 UTC
Requires
- ext-curl: *
- ext-json: *
- ext-pdo: *
- illuminate/contracts: ^11.0
Requires (Dev)
- nunomaduro/collision: ^5.0
- nunomaduro/larastan: ^1.0.1
- orchestra/testbench: ^6.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- spatie/laravel-ray: ^1.26
README
支持
- Eloquent 查询
- 读取一致性:强、弱或无
- 读取新鲜度 & 严格新鲜度
- 排队写入
- 可选直接读取 SQLite 数据库
(尚未)支持
- 批量写入
- 批量选择
- 事务
安装
使用 composer 安装
composer require nielspeen/rqlite-laravel-driver
设置
示例 config/database.php 配置
'connections' => [ 'rqlite' => [ 'url' => env('DB_RQLITE_URL', 'rqlite://127.0.0.1:4001/db'), ], 'rqlite2' => [ 'driver' => env('DB_RQLITE_CONNECTION', 'rqlite'), 'database' => env('DB_RQLITE_DATABASE', 'db'), 'host' => env('DB_RQLITE_HOST', '127.0.0.1'), 'port' => env('DB_RQLITE_PORT', '4001'), 'username' => env('DB_RQLITE_USERNAME', null), 'password' => env('DB_RQLITE_PASSWORD', null), ], // ... ]
注意,数据库 db 名称将被忽略,因为 RQLite 目前只支持单个数据库。但我仍然建议您指定一个数据库名称,以最大程度地与 Laravel 兼容。
用法
默认情况下,所有查询都使用 强一致性 执行。您可以通过以下方法指定一致性级别。
使用模型特性
use Wanwire\RQLite\PDO\PDO; use Wanwire\RQLite\WithRQLiteBuilder; class MyModel extends Model { use WithRQLiteBuilder; protected string $consistency = PDO::RQLITE_CONSISTENCY_STRONG; // or '_WEAK' or '_NONE'
扩展 RQLite 模型
use \Wanwire\RQLite\Models\WeakConsistencyModel; class MyModel extends WeakConsistencyModel
使用查询构建器
User::noConsistency()->where('admin', 1)->find(1); User::weakConsistency()->find(323); User::strongConsistency()->find(747);
PDO
有时您想直接访问 PDO 对象。例如
$pdo = DB::getPdo(); // Set custom PDO attribute $pdo->setAttribute(Wanwire\RQLite\Pdo\PDO::RQLITE_ATTR_QUEUED_WRITES, true); // Perform a single query to update both columns DB::table('users') ->where('user_id', 999) ->update([ 'bytes_downloaded' => DB::raw("bytes_downloaded + $bytesDownloaded"), 'bytes_uploaded' => DB::raw("bytes_uploaded + $bytesUploaded"), ]);
警告
查询执行后,一致性级别不会被重置。连续的查询将使用相同的一致性级别,除非使用特性、模型或查询构建器设置新的一致性级别。
这种方法确保了预加载使用与查询的主要模型相同的一致性级别。
直接从 SQLite 读取
如果您有高流量的网站,通过 RQLite 的开销可能会很大。通过一些预防措施,您可以通过直接从 SQLite 读取来提高性能。这仅适用于 无 一致性的查询。
在您的 database.php 中添加一个指向数据库的直接 sqlite 参数
'connections' => [ 'rqlite' => [ 'driver' => env('DB_RQLITE_CONNECTION', 'rqlite'), 'database' => env('DB_RQLITE_DATABASE', 'db'), 'host' => env('DB_RQLITE_HOST', '127.0.0.1'), 'port' => env('DB_RQLITE_PORT', '4001'), 'username' => env('DB_RQLITE_USERNAME', null), 'password' => env('DB_RQLITE_PASSWORD', null), 'sqlite' => 'sqlite:/var/lib/rqlite/db.sqlite', ], ]
其次,您需要确保您的 Laravel 应用程序具有只读访问 SQLite 数据库的权限。
不要授予您的 Laravel 应用程序对 SQLite 数据库的写入权限。这将破坏数据库!即使在只读模式下,SQLite 也偶尔会对数据库进行修改,这些修改与 RQLite 不兼容。
致谢
- [nielspeen][https://github.com/nielspeen)
- hushulin
- 所有贡献者
许可
MIT 许可证(MIT)。有关更多信息,请参阅许可文件。