ORM
Learn about Opis Database ORM
This version of the library is no longer maintained. Please consider upgrading to the latest release
Opis Database ORM provides a simple and elegant ActiveRecord implementation for
working with database records, allowing you to map each table to a model.
Models are represented by classes that inherits from Opis\Database\Model
abstract class,
which allow you to query tables, to insert new data in your tables, or to update or delete existing records.
Models should not directly extend the Opis\Database\Model
class.
Instead, users should create a class that extends the Opis\Database\Mode
l class
and implements all the abstract methods, then utilize that implementation as a base class for all models.
use Opis\Database\Model;
use Opis\Database\Connection;
// Implementation of Opis\Database\Model
class BaseModel extends Model
{
protected static $connection;
public static function getConnection()
{
if (static::$connection === null) {
static::$connection = new Connection('mysql:dbname=mydatabase',
'username',
'password');
}
return static::$connection;
}
}
// User model
class User extends BaseModel
{
//
}
Mapping models to tables
If a model’s associated table name is not explicitly specified by the user, Opis Database
will try to automatically map that model to a table. A model named Bar
will be mapped
to a table named bars
and a model named FooBar
will be mapped to a table named foo_bars
.
You can use the $table
property to explicitly define the name of the table associated with the model.
// User model
class User extends BaseModel
{
protected $table = 'my_users';
}
Table’s primary key
All tables are expected to have a primary key named id
. If your table’s primary key
is named different, then you can specify the primary key’s name by adding a $primaryKey
property to the model.
// User model
class User extends BaseModel
{
protected $primaryKey = 'uid';
}
By default, Opis Database ORM assumes that the table’s primary key is an autoincrementing key.
If you want to provide a custom primary key you must set the $primaryKeyType
property to
Model::PRIMARY_KEY_CUSTOM
and overwrite the generatePrimaryKey
method.
You must make sure that the generated primary key is a unique value.
// User model
class User extends BaseModel
{
protected $primaryKeyType = Model::PRIMARY_KEY_CUSTOM;
protected function generatePrimaryKey()
{
// return a unique primary key
}
}