https://github.com/folded-php/orm
An ORM for you web app.
https://github.com/folded-php/orm
eloquent laravel orm php
Last synced: 10 days ago
JSON representation
An ORM for you web app.
- Host: GitHub
- URL: https://github.com/folded-php/orm
- Owner: folded-php
- License: mit
- Created: 2020-09-07T20:39:18.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-10-17T07:58:00.000Z (over 5 years ago)
- Last Synced: 2025-05-14T04:45:59.934Z (9 months ago)
- Topics: eloquent, laravel, orm, php
- Language: PHP
- Homepage: https://packagist.org/packages/folded/orm
- Size: 87.9 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# folded/orm
A standalone Eloquent ORM for you web app.
[](https://github.com/folded-php/orm/blob/master/LICENSE) [](https://github.com/folded-php/orm/blob/master/composer.json#L14) [](https://packagist.org/packages/folded/orm) [](https://travis-ci.com/folded-php/orm) [](https://codeclimate.com/github/folded-php/orm/maintainability) [](https://www.tickgit.com/browse?repo=github.com/folded-php/orm)
## Summary
- [About](#about)
- [Features](#features)
- [Requirements](#requirements)
- [Installation](#installation)
- [Examples](#examples)
- [Version support](#version-support)
- [Credits](#credits)
## 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](https://github.com/folded-php/action): A way to organize your controllers for your web app.
- [folded/config](https://github.com/folded-php/config): Configuration utilities for your PHP web app.
- [folded/crypt](https://github.com/folded-php/crypt): Encrypt and decrypt strings for your web app.
- [folded/exception](https://github.com/folded-php/exception): Various kind of exception to throw for your web app.
- [folded/history](https://github.com/folded-php/history): Manipulate the browser history for your web app.
- [folded/request](https://github.com/folded-php/request): Request utilities, including a request validator, for your PHP web app.
- [folded/routing](https://github.com/folded-php/routing): Routing functions for your PHP web app.
- [folded/session](https://github.com/folded-php/session): Session functions for your web app.
- [folded/view](https://github.com/folded-php/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](https://laravel.com/docs/7.x/eloquent)
## Installation
- [1. Install the package](#1-instal-the-package)
- [2. Add a database connection](#2-add-a-database-connection)
- [3. Create your model class](#3-create-your-model-file)
### 1. Install the package
In your root directory, run this command:
```bash
composer require folded/orm
```
### 2. Add a database connection
Call this method before using your Eloquent model to provide with your database connection information:
```php
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.
```php
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](https://laravel.com/docs/7.x/eloquent).
- [1. Get all the data from your model](#1-get-all-the-data-from-your-model)
- [2. Add more information to the database connection](#2-add-more-information-to-the-database-connection)
- [3. Enable/disable eloquent events](#3-enable-disable-eloquent-events)
- [4. Go to a specific page before paginating](#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.
```php
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.
```php
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](https://laravel.com/docs/7.x/eloquent#events).
```php
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.
```php
$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:
```php
$posts = Post::where("author", "foo")->toPage(2)->paginate(15);
```
To fix this issue, use the verbose version of `->paginate()`:
```php
$posts = Post::where("author", "foo")->paginate(15, ["*"], "page", 2); // 2 is the page number
```
## Version support
| | 7.3 | 7.4 | 8.0 |
| ------ | --- | --- | --- |
| v0.1.0 | ❌ | ✔️ | ❓ |
| v0.1.1 | ❌ | ✔️ | ❓ |
| v0.2.0 | ❌ | ✔️ | ❓ |
| v0.2.1 | ❌ | ✔️ | ❓ |
| v0.2.2 | ❌ | ✔️ | ❓ |
## Credits
This library would not have see the light without the impressive work from Matt Stauffer with [Torch](https://github.com/mattstauffer/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](https://github.com/mattstauffer/Torch) to this great idea, and follow him on Twitter [@stauffermatt](https://twitter.com/stauffermatt)!