1. Go to this page and download the library: Download webxid/edmo library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
$rules = [
1, 2, 3, 4, 5,
];
$query = '
SELECT id, name
FROM users
WHERE id = :id
AND rule IN (:rule)
LIMIT 10
';
//Connecting to default DB
$users = WebXID\EDMo\DB::query($query)
->binds([
':id' => $id,
':rule' => $rules,
])
->execute()
->fetchArray();
//Connecting to custom DB
$old_users = WebXID\EDMo\DB::connect('archive')
->query($query)
->binds([
':id' => $id,
':rule' => $rules,
])
->execute()
->fetchArray();
//Connecting to default DB
WebXID\EDMo\DB::update('users')
->values([
'rule' => 6,
])
->where('rule IN (:rule)')
->binds([
':rule' => $rules,
])
->execute();
//Connecting to default DB
WebXID\EDMo\DB::insert('users')
->values([
'rule' => 6,
])
->execute()
->lastInsertId();
WebXID\EDMo\DB::lastInsertId();
//Get last ID from custom DB
WebXID\EDMo\DB::lastInsertId('archive');
//Insert new and Update duplicated row
WebXID\EDMo\DB::insert('users', WebXID\EDMo\DB::DUPLICATE_UPDATE)
->values([
'rule' => 6,
])
->execute();
//Connecting to default DB
WebXID\EDMo\DB::replace('users')
->values([
'rule' => 6,
])
->execute();
//Connecting to default DB
WebXID\EDMo\DB::delete('users')
->where('rule IN (:rule)')
->binds([
':rule' => $rules,
])
->execute();
//Destroy all connections
WebXID\EDMo\DB::clean();
//Destroy one connection, for example, with connection name 'archive'
WebXID\EDMo\DB::clean('archive');
WebXID\EDMo\DB::connect('archive')
->delete('users')
->where('rule IN (:rule)')
->binds([
':rule' => $rules,
])
->execute()
->clean();
//Open Transaction
$db = WebXID\EDMo\DB::connect()
->beginTransaction();
//Revert all changes, which happens inside Transaction
$db->rollbackTransaction();
//Commit all changes, which happens inside Transaction
$db->commitTransaction();
$rows = WebXID\EDMo\DB\Build::select([
'column_1',
'column_2',
])
->from('table_name')
->where(' column_1 = :column_1 ')
->binds([':column_1' => 123]) // pass here `where` condition value placeholders
->groupBy('column_1')
->having('column_2')
->orderBy('column_3', 'DESC')
->limit(5, 3)
->execute();
// This query is equals next string:
'
SELECT column_1, column_2
FROM table_name
WHERE column_1 = :column_1
GROUP BY column_1
HAVING column_2
ORDER BY column_3 DESC
LIMIT 5, 15
';
$rows = WebXID\EDMo\DB\Build::select([
'column_1',
'column_2',
])
->from('table_name')
->find(['column_name' => 'column_value']) // You don't have to use method `binds()` - logic will do it automatically
->groupBy('column_1')
->having('column_2')
->orderBy('column_3', 'ASC')
->limit(5, 2)
->execute();
// This query is equals next string:
'
SELECT column_1, column_2
FROM table_name
WHERE column_name = :column_name
GROUP BY column_1
HAVING column_2
ORDER BY column_3 ASC
LIMIT 5, 10
';
$rows = WebXID\EDMo\DB\Build::select([
'colunm_1',
'column_2',
])
->from('table_name')
->where(' column_3 = 1 ')
->find(['column_4' => 123])
->execute();
// This query is equals next string:
'
SELECT column_1, column_2
FROM table_name
WHERE (column_3 = 1) AND (column_4 = 123)
';
use WebXID\EDMo\Rules;
// Implement entity class `User`
class User extends WebXID\EDMo\AbstractClass\SingleKeyModel
{
// Uses for update, insert and delete DB queries
const TABLE_NAME = 'user';
// Uses for `select` queries
const JOINED_TABLES = 'user u
LEFT JOIN role r ON r.role_id = u.role_id';
protected static $pk_column_name = 'user_id';
// Uses for update and insert queries
protected static $columns = [
'first_name' => 'string|50',
'last_name' => 'string|50',
'role_id' => 'int|11',
];
// Uses for `select` queries
protected static $joined_columns_list = [
'u.user_id',
'u.first_name',
'u.last_name',
'r.role_id',
'r.title AS role_name',
];
protected static $db_connection = false;
// Fill this property to allow an object property on read
protected static $readable_properties = [
// 'readable_property_name' => true,
];
// Fill this property to allow an object property on write
protected static $writable_properties = [
// 'writable_property_name' => true,
];
/**
* @inheritDoc
*/
public static function getRules(): Rules
{
return Rules::make([
'first_name' => Rules\Field::string([
Rules\Type::itRequired(1),
Rules\Type::minLen(1),
Rules\Type::maxLen(50),
]),
'role_id' => Rules\Field::int([
Rules\Type::minLen(1),
Rules\Type::maxLen(10),
]),
]);
}
}
$user_id = User::addNew([
'first_name' => 'Tony',
'group_id' => 1,
]);
// To get data of single entity by Primary Key
$user = User::get($user_id);
$user->first_name = 'Jeck';
$user->group_id = 2;
$user->save();
// To get entity data by class `Entity`
$user_list_group_2 = User::find(['group_id' = 2]);
$full_user_list = User::all();
$user->delete();
// To get entity data by class `Entity`
$entity = WebXID\EDMo\DataProcessor::init(User::class);
$entity->find()->extract();
$entity->search()->extract();
$entity->all()->extract();
use WebXID\EDMo\Rules;
// Implement entity class `Option`
class Option extends WebXID\EDMo\AbstractClass\MultiKeyModel
{
// Uses for update, insert and delete DB queries
const TABLE_NAME = 'option';
// Uses for `select` queries
const JOINED_TABLES = 'option o
LEFT JOIN config c ON c.key = o.config_key';
// Uses for update and insert queries
protected $columns = [
'key' => 'string|50',
'value' => 'string|50',
];
// Uses for `select` queries
protected $joined_columns_list = [
'o.key',
'o.value',
'u.last_name',
'c.key AS config_key',
];
protected $db_connection = false;
// Fill this property to allow an object property on read
protected static $readable_properties = [
// 'readable_property_name' => true,
];
// Fill this property to allow an object property on write
protected static $writable_properties = [
// 'writable_property_name' => true,
];
/**
* @inheritDoc
*/
protected function getUniqueKeyConditions(): array
{
return [
'key' => $this->key,
'value' => $this->value,
];
}
/**
* @inheritDoc
*/
public static function getRules(): Rules
{
return Rules::make([
'key' => Rules\Field::string([
Rules\Type::itRequired(1),
Rules\Type::minLen(1),
Rules\Type::maxLen(50),
]),
'value' => Rules\Field::string(),
]);
}
}
// To get entity list
$limit = 1;
$page = 3;
$users_list = Option::all($limit, $page);
// To add new Entity into DB
$user = Option::addNew();
$user->key = 'some_option';
$user->value = 'Smitt';
$user->save();
// Or you can use bulk data loading to add the data
$user = Option::addNew()
->save([
'key' => 'some_option',
'value' => 'Smitt',
]);
// To get entity collection data by class `Grabber`
$entity_collection = WebXID\EDMo\DataProcessor::init(Option::class);
// class `User` has to extend class `\WebXID\EDMo\AbstractClass\Collection`
$users = WebXID\EDMo\DataProcessor::init(User::class);
// To get data without any condition
$users->all()
->orderBy(string)
->groupBy(string)
->limit(int, int)
->extract();
// To find users by simple conditions
$users->find(['permission' => '10'])
->orderBy(string)
->groupBy(string)
->limit(int, int)
->extract(); // return users with `permission` = 10
// To find users by complex condition
$users->search('first_name != :first_name', [':first_name' => 'Sam'])
->orderBy(string)
->groupBy(string)
->limit(int, int)
->extract(); // return users with `first_name` != 'Sam'
$users->delete('id = :id', [':id' => 1]); // removes row with id = 1
// To add new entity data - can be used only for entities with single Primary key
$new_user = $users->addNew();
$new_user->first_name = 'John';
$new_user->last_name = 'Smitt';
$last_insert_id = $new_user->save(); // returns last_insert_id if table has autoincrement
// Or you can use bulk data loading to add the data
$last_insert_id = $users->addNew($user_id)
->save([
'name' => 'Mark',
]);
$new_user = WebXID\EDMo\DataProcessor::init(User::class)
->update('user_id = :id')
->binds([':id' => $user_id]);
$new_user->name = 'Mark';
$new_user->save();
// Or you can use bulk data loading to add the data
WebXID\EDMo\DataProcessor::init(User::class)
->update('user_id = :id')
->binds([':id' => $user_id])
->save([
'name' => 'Mark',
]);