Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tursodatabase/turso-driver-laravel
Turso Driver for Laravel with Native libSQL - Community SDK
https://github.com/tursodatabase/turso-driver-laravel
database driver laravel laravel-package php sqlite turso
Last synced: 2 days ago
JSON representation
Turso Driver for Laravel with Native libSQL - Community SDK
- Host: GitHub
- URL: https://github.com/tursodatabase/turso-driver-laravel
- Owner: tursodatabase
- License: mit
- Created: 2024-06-06T13:23:20.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-01-21T08:28:25.000Z (15 days ago)
- Last Synced: 2025-01-26T13:06:18.575Z (9 days ago)
- Topics: database, driver, laravel, laravel-package, php, sqlite, turso
- Language: PHP
- Homepage:
- Size: 425 KB
- Stars: 77
- Watchers: 4
- Forks: 9
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
Awesome Lists containing this project
README
> [!CAUTION]
> There is a new adapter coming soon for Laravel that doesn't require using an extension. This extension doesn't support offline writes beta. Join us on Discord to talk more - https://discord.gg/turso
SQLite for Production. Powered by libSQL and libSQL Extension for PHP.
LibSQL is a fork of SQLite and this package is #1 LibSQL Driver that run natively using LibSQL Native Extension/Driver/Whatever and support Laravel Ecosystem.---
## Installation
You can install the package via composer:
```bash
composer require tursodatabase/turso-driver-laravel
```Then register the service provider at `bootstrap/providers.php` array:
```php
return [
App\Providers\AppServiceProvider::class,
Turso\Driver\Laravel\LibSQLDriverServiceProvider::class, // Here
];
```The package now include the `turso-php-installer`, so you can install the LibSQL Extension via artisan command:
```
php artisan turso-php:install
```And you can read the all command using `php artisan | grep turso-php` or read the [manual](https://darkstation.mintlify.app/dark-extensions/tools/installer/reference)
## Laravel Sail
Don't worry, we also provide Laravel Sail step by step guide for you read: [Sailing with LibSQL](https://darkstation.mintlify.app/dark-extensions/tools/installer/platforms/laravel-sail)
## Environment Variable Overview
You need to know the additional configuration in `.env` file, which come from Laravel and which come from LibSQL Driver. And here is the overview of `.env`:
**Laravel**
```env
DB_CONNECTION=libsql
DB_DATABASE=database.sqlite
```- `DB_CONNECTION` key is represent default database connection like `libsql`, `sqlite`, `mysql`, `mariadb`, `pgsql`, and `sqlsrv`.
- `DB_DATABASE` key is represent the location of database name or in this case is database filename.**LibSQL Driver**
```env
DB_AUTH_TOKEN=
DB_SYNC_URL=
DB_SYNC_INTERVAL=5
DB_READ_YOUR_WRITES=true
DB_ENCRYPTION_KEY=
```Create a new Turso Database [here](https://docs.turso.tech/quickstart)
### Environment Variables for Turso Driver
Below is a list of environment variables used to configure the Turso driver. Each variable plays a role in defining database connection and behavior:
- **`DB_AUTH_TOKEN`**
You can generate this token using the following command:```bash
turso db tokens create
```Alternatively, visit your [Turso Dashboard](https://dashboard.turso.io), select the desired database, and generate the token from there.
- **`DB_SYNC_URL`**
This URL is automatically generated by Turso when you create a new database. Retrieve the database URL using the command:```bash
turso db show --url
```- **`DB_SYNC_INTERVAL`**
This variable defines the interval (in seconds) at which an embedded replica synchronizes with the primary database. It ensures automatic synchronization of the database in the background.
**Default:** `5 seconds`
**Use case:** Keeps replicas up-to-date with minimal manual intervention.- **`DB_READ_YOUR_WRITES`**
Ensures that writes made by a connection are immediately visible to subsequent reads from the same connection. This is vital for maintaining consistency in distributed systems.
**Default:** `true`
**Use case:** Guarantees clients always see their latest writes.- **`DB_ENCRYPTION_KEY`**
Specifies the encryption key used for database encryption. This key is critical for securing data at rest, ensuring only authorized individuals can decrypt the database content.
**Default:** Empty
**Use case:** Protects sensitive data stored on disk.## Choose Your Connection Needs
**LibSQL** has **4 types of connections** to interact with the database: _In-Memory Connection_, _Local Connection_, _Remote Connection_, and _Remote Replica Connection (Embedded Replica)_
💾 — In-Memory Connection
To be able to use LibSQL in-memory as if you were using SQLite, simply change the following
.env
:
DB_CONNECTION=libsql
DB_DATABASE=:memory:
🖥 — Local Connection
To be able to use LibSQL locally as if you were using SQLite, simply change the following
.env
:
DB_CONNECTION=libsql
DB_DATABASE=database.sqlite
Ignore other LibSQL
.env
variables.🌏 — Remote Connection
To use LibSQL Remote Connection only, you can define the following
.env
variables:
DB_CONNECTION=libsql
DB_AUTH_TOKEN=<your-database-auth-token-from-turso>
DB_SYNC_URL=<your-database-url-from-turso>
🌱 — Remote Replica Connection (Embedded Replica)
To configure remote replica connection (embedded replica), you can simply use the following
.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=
That's it! How easy to make different connection using LibSQL Driver in Laravel, right?!
## Database Configuration
Add this configuration at `config/database.php` inside the `connections` array:
```php
'libsql' => [
'driver' => 'libsql',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'url' => env('DB_SYNC_URL', ''),
'authToken' => env('DB_AUTH_TOKEN', ''),
'syncInterval' => env('DB_SYNC_INTERVAL', 5),
'read_your_writes' => env('DB_READ_YOUR_WRITES', true),
'encryptionKey' => env('DB_ENCRYPTION_KEY', ''),
],
```> Copy and Paste and do not change it! Or try to change it and will broke your app or give you malfunction.
## Usage
For database operation usage, everything have same interface like usual when you using `Illuminate\Support\Facades\DB` in your database model. But remember, this is LibSQL they have `sync` method that can be used when you connect with Remote Replica Connection (Embedded Replica).
```php
use Illuminate\Support\Facades\DB;// Create
DB::table('users')->insert([
'name' => 'Budi Dalton',
'email' => '[email protected]'
]);// 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
Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
## Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
## Security Vulnerabilities
Please review [our security policy](../../security/policy) on how to report security vulnerabilities.
## Contributors
![Contributors](https://contrib.nn.ci/api?no_bot=true&repo=tursodatabase/turso-driver-laravel)
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.