This repository has been archived by the owner on Dec 25, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
ActiveRecord
Kerem Güneş edited this page Apr 8, 2017
·
10 revisions
ActiveRecord aims to simplify CRUD operations providing entity objects.
Simple define a class that extends Oppa\ActiveRecord\ActiveRecord
.
use Oppa\ActiveRecord\ActiveRecord;
class Users extends ActiveRecord {
protected $table = 'users';
protected $tablePrimary = 'id';
}
// init ar object
$users = new Users($db);
// find one that id=1
$user = $users->find(1);
// check user found?
if ($user->isFound()) {
print $user->name;
}
** Fetching objects.
// find all
$users = $users->findAll();
// find many that id=1,2,3
$users = $users->findAll([1,2,3]);
$users = $users->findAll('id in(?)', [[1,2,3]]);
$users = $users->findAll('id in(?,?,?)', [1,2,3]);
dump $users;
foreach ($users as $user) {
print $user->name;
}
// not found
$users = $users->findAll([-1,null,'foo']);
dump $users->isEmpty(); // true
** Inserting an object.
// insert a user
$user = $users->entity();
$user->name = 'Ali';
$user->old = 40;
dump $user->save();
// or
$user = $users->save($user);
// here we will see "id" property filled with last insert id
dump $user;
** Updating an object.
// update a user with "id=1"
$user = $users->entity();
$user->id = 1; // set primary value
$user->old = 55;
dump $users->save($user);
// or
$user = $users->find(1);
$user->old = 55;
dump $user->save();
** Removing an object.
$user = $users->find(1);
if ($user->isFound()) {
dump $user->remove();
}
// or
$user = $users->entity();
$user->id = 1;
dump $user->remove();
// remove users "id=1,2,3"
dump $users->removeAll([1,2,3]);
Working with on
helpers
You can also work with helper methods like onFind
, onSave
and onRemove
.
class Users extends ActiveRecord {
protected $table = 'users';
protected $tablePrimary = 'id';
public function onFind(\Oppa\Query\Builder $query) {
// do something with query builder object
return $query->joinLeft('user_score', 'user_score.user_id = user.id')
->selectMore('sum(user_score.score) as score');
}
public function onSave($result) {
// if insert: last insert id
// if update: affected rows
dump $result;
}
public function onRemove($result) {
// affected rows
dump $result;
}
}
$user = (new Users($db))->find(1);
print $user->score;
print_r($user);
// Oppa\ActiveRecord\Entity Object
// (
// [data:private] => Array
// (
// [id] => 1
// [name] => Kerem
// [score] => 30
// [login] => 2015-01-12 20:00:52
// )
// ...
Defining object methods
You can define helper (shorcut) methods in your objects and all these methods will be bound returning entity objects.
class Users extends ActiveRecord {
protected $table = 'users';
protected $tablePrimary = 'id';
public function onEntity($entity) {
$entity->addMethod('getFullName', function() {
return sprintf('%s %s', $this->first_name, $this->last_name);
});
$entity->addMethod('getUserLink', function() {
return sprintf('<a href="user.php?id=%s">%s</a>',
$this->id, $this->getFullName());
});
}
}
$user = (new Users($db))->find(1);
print $user->getFullName(); // Kerem Güneş
print $user->getUserLink(); // <a href="user.php?id=1">Kerem Güneş</a>
Create new entity
$user = $users->entity();
$user = $users->entity(['id' => 1, ...]);
Add data to entity
$user->setData(['id' => 1, ...]);
Get entity data as array|object
$data = $user->toArray();
$data = $user->toObject();