1
|
|
|
<?php |
2
|
|
|
namespace Ubiquity\orm\creator\database; |
3
|
|
|
|
4
|
|
|
use Ubiquity\orm\creator\ModelsCreator; |
5
|
|
|
|
6
|
|
|
|
7
|
|
|
class DbModelsCreator extends ModelsCreator{ |
8
|
|
|
private $pdoObject; |
9
|
|
|
|
10
|
1 |
|
protected function init($config){ |
11
|
1 |
|
parent::init($config); |
12
|
1 |
|
$this->connect($config["database"]); |
13
|
1 |
|
} |
14
|
|
|
/** |
15
|
|
|
* Réalise la connexion à la base de données |
16
|
|
|
*/ |
17
|
1 |
|
private function connect($config) { |
18
|
|
|
try { |
19
|
1 |
|
$this->pdoObject = new \PDO( |
20
|
1 |
|
$config["type"].':host=' . $config["serverName"] . ';dbname=' |
21
|
1 |
|
. $config["dbName"] . ';port=' . $config["port"], |
22
|
1 |
|
$config["user"], $config["password"]); |
23
|
1 |
|
$this->pdoObject->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); |
24
|
1 |
|
$this->pdoObject->exec("SET CHARACTER SET utf8"); |
25
|
|
|
|
26
|
|
|
} catch (\PDOException $e) { |
27
|
|
|
print "Error!: " . $e->getMessage() . "<br/>"; |
28
|
|
|
} |
29
|
1 |
|
} |
30
|
|
|
|
31
|
|
|
|
32
|
1 |
|
protected function getTablesName(){ |
33
|
1 |
|
$sql = 'SHOW TABLES'; |
34
|
1 |
|
$query = $this->pdoObject->query($sql); |
35
|
1 |
|
return $query->fetchAll(\PDO::FETCH_COLUMN); |
36
|
|
|
} |
37
|
|
|
|
38
|
1 |
|
protected function getFieldsInfos($tableName) { |
39
|
1 |
|
$fieldsInfos=array(); |
40
|
1 |
|
$recordset = $this->pdoObject->query("SHOW COLUMNS FROM `{$tableName}`"); |
41
|
1 |
|
$fields = $recordset->fetchAll(\PDO::FETCH_ASSOC); |
42
|
1 |
|
foreach ($fields as $field) { |
43
|
1 |
|
$fieldsInfos[$field['Field']] = ["Type" => $field['Type'], "Nullable" => $field["Null"], "Email" => $this->fieldIsEmail($field['Field'])]; |
44
|
|
|
} |
45
|
1 |
|
return $fieldsInfos; |
46
|
|
|
} |
47
|
|
|
|
48
|
1 |
|
protected function fieldIsEmail($field) |
49
|
1 |
|
{ |
50
|
1 |
|
$possibleColumnNames = array("email", "mail", "courrierelectronique", "ecourrier", "mailaddresse", "mailaddresse", "mailadress", "mailadresse"); |
51
|
1 |
|
$res = false; |
52
|
1 |
|
|
53
|
1 |
|
if (in_array($field, $possibleColumnNames)) { |
54
|
|
|
$res = true; |
55
|
1 |
|
} |
56
|
|
|
return $res; |
57
|
|
|
} |
58
|
1 |
|
|
59
|
1 |
|
protected function getPrimaryKeys($tableName){ |
60
|
|
|
$fieldkeys=array(); |
61
|
|
|
$recordset = $this->pdoObject->query("SHOW KEYS FROM `{$tableName}` WHERE Key_name = 'PRIMARY'"); |
62
|
|
|
$keys = $recordset->fetchAll(\PDO::FETCH_ASSOC); |
63
|
1 |
|
foreach ($keys as $key) { |
64
|
1 |
|
$fieldkeys[] = $key['Column_name']; |
65
|
1 |
|
} |
66
|
1 |
|
return $fieldkeys; |
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
protected function getForeignKeys($tableName,$pkName){ |
70
|
|
|
$recordset = $this->pdoObject->query("SELECT * |
71
|
|
|
FROM |
72
|
|
|
information_schema.KEY_COLUMN_USAGE |
73
|
|
|
WHERE |
74
|
|
|
REFERENCED_TABLE_NAME = '".$tableName."' |
75
|
|
|
AND REFERENCED_COLUMN_NAME = '".$pkName."' |
76
|
|
|
AND TABLE_SCHEMA = '".$this->config["dbName"]."';"); |
77
|
|
|
return $recordset->fetchAll(\PDO::FETCH_ASSOC); |
78
|
|
|
} |
79
|
|
|
} |
80
|
|
|
|