198 lines
4.1 KiB
Markdown
198 lines
4.1 KiB
Markdown
# DBmodel
|
|
|
|
This library extends the builtin PDO object by several useful features.
|
|
|
|
## Basic usage
|
|
|
|
For testing create database `test` with user `test` and password `test`. In database create table `test` and insert same testing data.
|
|
|
|
```sql
|
|
CREATE TABLE `test` (
|
|
`id` int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
|
|
`name` varchar(255) DEFAULT NULL,
|
|
`created` datetime DEFAULT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
|
|
|
```
|
|
|
|
For basic testing run this code
|
|
|
|
```php
|
|
<?php
|
|
|
|
require_once __DIR__.'/../src/DBmodel.php';
|
|
|
|
$db = new \TPsoft\DBmodel\DBmodel('mysql:host=127.0.0.1;dbname=test;charset=utf8mb4', 'test', 'test');
|
|
|
|
// test query
|
|
$result = $db->query("show tables");
|
|
print_r($result);
|
|
|
|
// test results
|
|
$result = $db->getAll("show databases");
|
|
print_r($result);
|
|
|
|
$result = $db->getAll("show tables");
|
|
print_r($result);
|
|
|
|
$result = $db->getCol("show tables");
|
|
print_r($result);
|
|
|
|
$result = $db->getTableColumns("test");
|
|
print_r($result);
|
|
|
|
$result = $db->getRow("select * from test where id = 10");
|
|
print_r($result);
|
|
|
|
|
|
?>
|
|
```
|
|
|
|
## Interactive create MODEL class
|
|
|
|
Create file `creatorModel.php` and paste bellow code
|
|
|
|
```php
|
|
<?php
|
|
|
|
require_once __DIR__.'/../src/DBmodel.php';
|
|
require_once __DIR__.'/../src/creator.php';
|
|
|
|
$db = new \TPsoft\DBmodel\DBmodel('mysql:host=127.0.0.1;dbname=test;charset=utf8mb4', 'test', 'test');
|
|
|
|
$creator = new \TPsoft\DBmodel\Creator($db);
|
|
$creator->interact();
|
|
|
|
|
|
?>
|
|
```
|
|
|
|
now for each table run `php createModel.php` for interactive creating class for table.
|
|
|
|
```bash
|
|
$ php test2.php
|
|
New model name: Test
|
|
Table name: test
|
|
Entity name: test
|
|
Create MODEL class '/your/project/models/Test.php'? (y - yes, other - no) y
|
|
Create directory '/your/project/models'? (y - yes, other - no) y
|
|
Creating MODEL class ... MODEL class created
|
|
```
|
|
|
|
Creator build this MODEL class file
|
|
|
|
```php
|
|
<?php
|
|
/*
|
|
TPsoft.org 2000-2025
|
|
file for controlers/*.php
|
|
|
|
Milestones:
|
|
2025-05-27 21:36 Created
|
|
*/
|
|
|
|
class Test extends \TPsoft\DBmodel\DBmodel {
|
|
|
|
public $tables = array(
|
|
'test' => array(
|
|
'name' => 'test',
|
|
'primary_key_name' => 'id',
|
|
'allow_attributes' => array(
|
|
'name' => 'varchar(255)',
|
|
'created' => 'datetime'
|
|
)
|
|
),
|
|
);
|
|
|
|
public function exist($primary_key = null) {
|
|
return $this->existRecord('test', $primary_key);
|
|
}
|
|
|
|
public function test($primary_key = null, $data = array()) {
|
|
return $this->record('test', $primary_key, $data);
|
|
}
|
|
|
|
public function testBy($colname, $colvalue) {
|
|
return $this->recordBy('test', $colname, $colvalue);
|
|
}
|
|
|
|
public function testSave($data = array()) {
|
|
return $this->test($this->exist($data) ? $data : null, $data);
|
|
}
|
|
|
|
public function testEmpty() {
|
|
return $this->recordEmpty('test');
|
|
}
|
|
|
|
public function testAttributes() {
|
|
return $this->typesAttributes('test');
|
|
}
|
|
|
|
public function testCount() {
|
|
return $this->count('test');
|
|
}
|
|
|
|
public function getList($search = array(), $reverse = false, $concat_or = false) {
|
|
return $this->search('test')
|
|
->where($search, $concat_or)
|
|
->order(array('id' => $reverse ? 'DESC' : 'ASC'))
|
|
->toArray();
|
|
}
|
|
|
|
public function testCombo($col_key, $col_value, $add_empty = false) {
|
|
return $this->search('test')
|
|
->toCombo($col_key, $col_value, $add_empty);
|
|
}
|
|
|
|
}
|
|
|
|
?>
|
|
|
|
```
|
|
|
|
## Using MODEL class in your project
|
|
|
|
Illustrative example
|
|
|
|
```php
|
|
<?php
|
|
|
|
require_once __DIR__.'/../src/DBmodel.php';
|
|
require_once __DIR__.'/../models/test.php';
|
|
|
|
$db = new \TPsoft\DBmodel\DBmodel('mysql:host=127.0.0.1;dbname=test;charset=utf8mb4', 'test', 'test');
|
|
|
|
// empty contructor of new MODEL class use last database handler
|
|
$test = new Test();
|
|
|
|
// exists ID 11
|
|
$result = $test->exist(11);
|
|
print_r($result);
|
|
|
|
// insert new record
|
|
$result = $test->test(null, array('name' => 'new record'));
|
|
print_r($result);
|
|
|
|
// update record ID 11
|
|
$result = $test->test(11, array('name' => 'updated record'));
|
|
print_r($result);
|
|
|
|
// get record ID 11
|
|
$result = $test->test(11);
|
|
print_r($result);
|
|
|
|
// delete record ID 11
|
|
$result = $test->test(11, null);
|
|
print_r($result);
|
|
|
|
// get all records
|
|
$result = $test->getList();
|
|
print_r($result);
|
|
|
|
// get combined list of ID and name
|
|
$result = $test->testCombo('id', 'name');
|
|
print_r($result);
|
|
|
|
?>
|
|
```
|