-
Notifications
You must be signed in to change notification settings - Fork 0
/
ActiveRecord.php
103 lines (78 loc) · 3.17 KB
/
ActiveRecord.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
function classVars($sClassName) {
$reflection = new ReflectionClass($sClassName);
$vars = $reflection->getProperties();
$list = array();
foreach ($vars as $varProperty) {
if ($varProperty->class == $sClassName) {
$list[] = $varProperty->name;
}
}
return $list;
}
function separateWordsByCase($sWordCaseString)
{
return preg_split('/(?<=[a-z])(?=[A-Z])/x', $sWordCaseString);
}
function separateWordsByCaseToStr($sWordCaseString) {
return implode(' ', separateWordsByCase($sWordCaseString));
}
require_once './DAO.php';
/**
* FreePHPMVC Database connection class
*/
class ActiveRecord extends DAO
{
private $modelName = null;
public function __construct()
{
parent::__construct();
$this->modelName = get_called_class();
}
public function all()
{
$aResults = $this->selectAll(strtolower($this->modelName));
$aList = array();
$resultRows = array();
$oModel = new $this->modelName();
$reflectionClass = new ReflectionClass($oModel);
foreach ($aResults as $i => $aRow) {
foreach ($aRow as $column => $value) {
$sGetMethod = 'get'.ucfirst($column);
if (method_exists($oModel, $sGetMethod) and property_exists($oModel, $column)) {
$reflectionProperty = $reflectionClass->getProperty($column);
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($oModel, $value);
$aList[$i][$column] = $oModel->{$sGetMethod}();
} elseif(property_exists($oModel, $column)) {
$aList[$i][$column] = $value;
} else {
throw new Exception('Invalid property/column name "'.$column.'" in class "'.$this->modelName.'" . Aborting.');
}
}
}
return (array_values($aList));
}
public function save($post)
{
$oModel = new $this->modelName;
$aInsertList = array();
$reflectionClass = new ReflectionClass($oModel);
foreach ($post as $name => $sValue) {
$sSetMethod = 'set'.ucfirst($name);
if ( method_exists($oModel, $sSetMethod) ) {
$oModel->{$sSetMethod}($sValue);
$reflectionProperty = $reflectionClass->getProperty($name);
$reflectionProperty->setAccessible(true);
$sPropertyValue = $reflectionProperty->getValue($oModel);
$aInsertList[$name] = $sPropertyValue;
} elseif( property_exists($oModel, $name) ) {
$oModel->{$name} = $sValue;
$aInsertList[$name] = $sValue;
} else {
throw new Exception('Invalid method name given: "'. $name.'" in class "'.$this->modelName.'". Aborting.');
}
}
return $this->insert(strtolower($this->modelName), $aInsertList);
}
}