PHPackages                             mrmanchot/miniorm - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. mrmanchot/miniorm

ActiveLibrary[Database &amp; ORM](/categories/database)

mrmanchot/miniorm
=================

Just a mini ORM, for using Object Model and MySQL Abstraction Layer as simply as possible

1.0.14(5y ago)181073MITPHPPHP &gt;=5.3.0

Since Feb 17Pushed 5mo ago1 watchersCompare

[ Source](https://github.com/MrManchot/miniOrm)[ Packagist](https://packagist.org/packages/mrmanchot/miniorm)[ RSS](/packages/mrmanchot-miniorm/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)DependenciesVersions (16)Used By (0)

miniOrm
=======

[](#miniorm)

Just a mini ORM, for using Object Model and MySQL Abstraction Layer as simply as possible

Simple, Light-weight &amp; Extensible
-------------------------------------

[](#simple-light-weight--extensible)

- 1 Table = 1 Object Model. Create, read, update and delete in your database without using any SQL queries.
- Only one file to include and you're ready. Don't need tables configuration, miniOrm automatically determine your database model.
- Extend your object, create easily relation between it, override how to set values, automatically validate fields &amp; type and size and more...

How to install ?
----------------

[](#how-to-install-)

Install with composer `composer require mrmanchot/miniorm`Then just define your database connection :

```
define('_MO_DB_NAME_', 'dbname');
define('_MO_DB_LOGIN_', 'dblogin');
define('_MO_DB_PASSWORD_', 'dbpassword');
define('_MO_DB_SERVER_', 'localhost');
```

How it works ?
--------------

[](#how-it-works-)

### Create, read, update and delete

[](#create-read-update-and-delete)

```
### Create
$firstCharacter = new miniOrm\Obj('character');
$firstCharacter->name = 'Conan';
$firstCharacter->damage = 10;
$firstCharacter->insert();

# Can use hydrate() to set multiple fields
$secondCharacter = new miniOrm\Obj('character');
$secondCharacter->hydrate(array('name' => 'Hulk', 'damage' => 12));
$secondCharacter->insert();

# Can do all in one method
$thirdCharacter = miniOrm\Obj::create(
	'character',
	array('name' => 'Spiderman', 'damage' => 1)
);

### Update
$conan->damage = 13;
$conan->update(); // Can use too save() : update() if already exist, else insert()

### Delete
$firstCharacter->delete();
```

### Load Object

[](#load-object)

```
### Load
$conan = miniOrm\Obj::load(1, 'character');

### Multiple Load
$strongCharacters = miniOrm\Obj::find(array("damage > 1"), 'character');
foreach($strongCharacters as $strongCharacter) {
	echo $strongCharacter->name.' : '.$strongCharacter->damage.'';
}
```

### Extend your object

[](#extend-your-object)

```
class Character extends miniOrm\Obj {

	# Define your database name
	protected static $tableStatic = 'character';

    # Can define relation table, load the Race object for the id_race field
    public $relations = array(
        array('obj' => 'race', 'field' => 'id_race')
    );

    # Extends 'set' functions : call set_damage() ( 'set_' + 'damage')
    public function set_damage($damage) {
        switch ($this->race->name) {
            case 'Orc':
            	$maxDamage = 10;
				break;
            case 'Human':
            	$maxDamage = 8;
				break;
			default: $maxDamage = 20;
        }
        if($damage > $maxDamage)
        	$damage = $maxDamage;
        return $damage;
    }

}

$hulk = Character::load(2);
$hulk->id_race = 2;

# Give you have access to $secondCharacter->race as an Obj
$hulk->getRelations();

# Call before the Character set_damage() method
$hulk->damage = 12;
$hulk->update();

# Will return : 'Hulk (Human) : 8'
echo $hulk->name.' ('.$hulk->race->name.') : '.$hulk->damage.'';
```

### MySQL Abstraction Layer

[](#mysql-abstraction-layer)

```
### Get an access to your database connection
$db = miniOrm\Db::inst();

### Insert, update, delete and count
$db->insert('character', array('name' => 'Wolverine', 'damage' => 1));
$db->update('character', array('damage' => 12), array('name="Wolverine"') );
$db->delete('character', array('name="Wolverine"') );
$db->count('character', array('damage > 10'));

### Select shortcuts :

# Return a field
$damage = $db->getValue('damage', 'character', array('name = "Wolverine"'));

# Return a row
$character = $db->getRow('*', 'character', array('id_character = 1'));

# Return an array
$characters = $db->getArray(
	'name, damage',
	'character',
	'damage > 5',
	NULL,
	'damage DESC'
);

# Return an array of the value (in example : id_character)
$charactersIds = $db->getValueArray(
	'id_character',
	'character',
	'damage > 5'
);
```

Optional configuration
----------------------

[](#optional-configuration)

```
# Freeze option permit to add to cache your database configuration.
# Once activated, you can't access to new table dynamically : just active it in production.
define('_MO_FREEZE_', true); // Default : false

# Display MySQL errors
define('_MO_DEBUG_', false); // Default : true

# Define the cache dir
define('_MO_CACHE_DIR_', '/var/www/mycachedir/'); // Default : miniOrm/cache
```

###  Health Score

39

—

LowBetter than 86% of packages

Maintenance50

Moderate activity, may be stable

Popularity19

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~149 days

Recently: every ~268 days

Total

15

Last Release

2017d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/31999b3179ed3f97c652767c97b1706586dd798caa4d12acd49ce429542df707?d=identicon)[MrManchot](/maintainers/MrManchot)

---

Top Contributors

[![MrManchot](https://avatars.githubusercontent.com/u/2027380?v=4)](https://github.com/MrManchot "MrManchot (55 commits)")

---

Tags

phporm

### Embed Badge

![Health badge](/badges/mrmanchot-miniorm/health.svg)

```
[![Health](https://phpackages.com/badges/mrmanchot-miniorm/health.svg)](https://phpackages.com/packages/mrmanchot-miniorm)
```

###  Alternatives

[matchory/elasticsearch

The missing elasticsearch ORM for Laravel!

3059.0k](/packages/matchory-elasticsearch)[modul-is/orm

Lightweight hybrid ORM/Explorer

1118.1k](/packages/modul-is-orm)[riverside/php-orm

PHP ORM micro-library and query builder

111.2k](/packages/riverside-php-orm)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
