folded / orm
A standalone Eloquent ORM for you web app.
Requires
- php: >=7.4.0
- illuminate/database: 7.*
- illuminate/events: 7.*
- illuminate/pagination: 7.*
Requires (Dev)
- friendsofphp/php-cs-fixer: 2.*
- pestphp/pest: 0.3.*
- phpstan/phpstan: 0.12.*
- phpunit/phpunit: 9.*
README
A standalone Eloquent ORM for you web app.
Summary
About
Provides a standalone package to use Eloquent model inside your web app, with minimal configuration.
Folded is a constellation of packages to help you setting up a web app easily, using ready to plug in packages.
- folded/action: A way to organize your controllers for your web app.
- folded/config: Configuration utilities for your PHP web app.
- folded/crypt: Encrypt and decrypt strings for your web app.
- folded/exception: Various kind of exception to throw for your web app.
- folded/history: Manipulate the browser history for your web app.
- folded/request: Request utilities, including a request validator, for your PHP web app.
- folded/routing: Routing functions for your PHP web app.
- folded/session: Session functions for your web app.
- folded/view: View utilities for your PHP web app.
Features
- All the features provided by Laravel's Eloquent
- Eager load the engine, so if a request does not call an eloquent method, it is never booted
- Enable the Eloquent events only if you need them
Requirements
- PHP version >= 7.4.0
- Composer installed
- Knowledge with Eloquent ORM
Installation
1. Install the package
In your root directory, run this command:
composer require folded/orm
2. Add a database connection
Call this method before using your Eloquent model to provide with your database connection information:
use function Folded\addDatabaseConnection; addDatabaseConnection([ "driver" => "mysql", "host" => "localhost", "username" => "root", "password" => "root", ]);
You can see a complete list of options in the example [put example here].
3. Create your model file
Anywhere you want, create a class to map your table.
namespace App; use Folded\Model; class Post extends Model { // }
Examples
As this library relies on Eloquent, you will find a useful amount of information about all the capability of this ORM in the official documentation.
- 1. Get all the data from your model
- 2. Add more information to the database connection
- 3. Enable/disable eloquent events
- 4. Go to a specific page before paginating
1. Get all the data from your model
In this example, we will use our Post
class to get all the posts.
use App\Post; $posts = Post::all(); foreach ($posts as $post) { echo "{$post->title}: {$post->excerpt}"; }
2. Add more information to the database connection
In this example, we will see a complete list of keys you can set on the database connection.
use function Folded\addDatabaseConnection; addDatabaseConnection([ "driver" => "mysql", "host" => "localhost", "database" => "my-blog", "username" => "root", "password" => "root", "charset" => "utf8mb4", "collation" => "utf8mb4_general_ci", "prefix" => "wp_", ]);
3. Enable/disable eloquent events
In this example, we will enable, then disable the Eloquent events system. Learn more on the official documentation.
use function Folded\enableEloquentEvents; use function Folded\disableEloquentEvents; enableEloquentEvents(); disableEloquentEvents();
4. Go to a specific page before paginating
In this example, we will instruct the paginator to go to a certain page before paginating. As we are not in Laravel, this is required to correctly returns the items according to the browsed page.
$posts = Post::toPage(2)->paginate(15);
The page number should come for example from the query strings, like when the user browse /post?page=2
.
However, for technical reasons, I could not find how to provide the same method after you call eloquent methods before. Which means that the following code will not work:
$posts = Post::where("author", "foo")->toPage(2)->paginate(15);
To fix this issue, use the verbose version of ->paginate()
:
$posts = Post::where("author", "foo")->paginate(15, ["*"], "page", 2); // 2 is the page number
Version support
Credits
This library would not have see the light without the impressive work from Matt Stauffer with Torch.
Torch is a project to provide instructions and examples for using Illuminate components as standalone components in non-Laravel applications, including Eloquent.
Give this man an ice cold beer, a star to this great idea, and follow him on Twitter @stauffermatt!