Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 80e889946b | |||
| cf59109a47 | |||
| ae59ffaa97 |
@ -4,7 +4,7 @@
|
|||||||
"description": "This library extends the builtin PDO object by several useful features. ",
|
"description": "This library extends the builtin PDO object by several useful features. ",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"readme": "README.md",
|
"readme": "README.md",
|
||||||
"keywords": ["db", "model", "pdo"],
|
"keywords": ["db", "model", "pdo", "mysql", "sqlite"],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Igor Mino",
|
"name": "Igor Mino",
|
||||||
|
|||||||
@ -21,8 +21,9 @@ class Creator {
|
|||||||
|
|
||||||
public function interact() {
|
public function interact() {
|
||||||
$name = $this->readline('New model name: ');
|
$name = $this->readline('New model name: ');
|
||||||
$table = $this->readline('Table name: ');
|
$table = strtolower($name);
|
||||||
$entity = $this->readline('Entity name: ');
|
$table = $this->readline('Table name ['.$table.']: ', $table);
|
||||||
|
$entity = $this->readline('Entity name ['.$table.']: ', $table);
|
||||||
$namespace = $this->readline('Namespace [App\Models]: ', 'App\Models');
|
$namespace = $this->readline('Namespace [App\Models]: ', 'App\Models');
|
||||||
if (strlen($entity) <= 0) {
|
if (strlen($entity) <= 0) {
|
||||||
$entity = $table;
|
$entity = $table;
|
||||||
@ -151,15 +152,19 @@ class ".$name." extends \TPsoft\DBmodel\DBmodel {
|
|||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getListByID($"."search = array(), $"."reverse = false, $"."concat_or = false) {
|
public function getListOrganize($"."cola_name, $"."search = array(), $"."reverse = false, $"."concat_or = false) {
|
||||||
$"."all = $"."this->getList($"."search, $"."reverse, $"."concat_or);
|
$"."all = $"."this->getList($"."search, $"."reverse, $"."concat_or);
|
||||||
$"."ret = array();
|
$"."ret = array();
|
||||||
if (is_array($"."all)) foreach ($"."all as $"."key => $"."row) {
|
if (is_array($"."all)) foreach ($"."all as $"."key => $"."row) {
|
||||||
$"."ret[$"."row[$primary_key_name]] = $"."row;
|
$"."ret[$"."row[$"."cola_name]] = $"."row;
|
||||||
}
|
}
|
||||||
return $"."ret;
|
return $"."ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getListByID($"."search = array(), $"."reverse = false, $"."concat_or = false) {
|
||||||
|
return $"."this->getListOrganize($primary_key_name, $"."search, $"."reverse, $"."concat_or);
|
||||||
|
}
|
||||||
|
|
||||||
public function ".$entity_one."Combo($"."col_key, $"."col_value, $"."add_empty = false) {
|
public function ".$entity_one."Combo($"."col_key, $"."col_value, $"."add_empty = false) {
|
||||||
return $"."this->search('".$entity."')
|
return $"."this->search('".$entity."')
|
||||||
->toCombo($"."col_key, $"."col_value, $"."add_empty);
|
->toCombo($"."col_key, $"."col_value, $"."add_empty);
|
||||||
|
|||||||
@ -154,6 +154,11 @@ class DBmodel
|
|||||||
return $where;
|
return $where;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDBtype()
|
||||||
|
{
|
||||||
|
return $this->dbh->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
public function existTable($table_id)
|
public function existTable($table_id)
|
||||||
{
|
{
|
||||||
$query = sprintf(
|
$query = sprintf(
|
||||||
@ -269,11 +274,14 @@ class DBmodel
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (count($primary_key_names) > 1) return true;
|
if (count($primary_key_names) > 1) return true;
|
||||||
|
$last_id = $this->getLastInsertID();
|
||||||
|
/*
|
||||||
if (method_exists($this->dbh, 'getLastInsertID')) {
|
if (method_exists($this->dbh, 'getLastInsertID')) {
|
||||||
$last_id = $this->getLastInsertID();
|
$last_id = $this->getLastInsertID();
|
||||||
} else {
|
} else {
|
||||||
$last_id = $this->getOne('SELECT last_insert_id()');
|
$last_id = $this->getOne('SELECT last_insert_id()');
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
return $last_id;
|
return $last_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,12 +312,14 @@ class DBmodel
|
|||||||
$query = sprintf(
|
$query = sprintf(
|
||||||
'UPDATE %s'
|
'UPDATE %s'
|
||||||
. ' SET %s'
|
. ' SET %s'
|
||||||
. ' WHERE %s'
|
. ' WHERE %s',
|
||||||
. ' LIMIT 1',
|
|
||||||
$table,
|
$table,
|
||||||
$set,
|
$set,
|
||||||
$this->buildWherePrimaryKey($table_id, $primary_key)
|
$this->buildWherePrimaryKey($table_id, $primary_key)
|
||||||
);
|
);
|
||||||
|
if ($this->getDBtype() == 'mysql') {
|
||||||
|
$query .= ' LIMIT 1';
|
||||||
|
}
|
||||||
$this->_debug('[DBmodel][record][UPDATE]: ' . $query);
|
$this->_debug('[DBmodel][record][UPDATE]: ' . $query);
|
||||||
$ret = $this->query($query);
|
$ret = $this->query($query);
|
||||||
if ($ret === false) {
|
if ($ret === false) {
|
||||||
@ -331,11 +341,13 @@ class DBmodel
|
|||||||
}
|
}
|
||||||
$query = sprintf(
|
$query = sprintf(
|
||||||
'DELETE FROM %s'
|
'DELETE FROM %s'
|
||||||
. ' WHERE %s'
|
. ' WHERE %s',
|
||||||
. ' LIMIT 1',
|
|
||||||
$table,
|
$table,
|
||||||
$this->buildWherePrimaryKey($table_id, $primary_key)
|
$this->buildWherePrimaryKey($table_id, $primary_key)
|
||||||
);
|
);
|
||||||
|
if ($this->getDBtype() == 'mysql') {
|
||||||
|
$query .= ' LIMIT 1';
|
||||||
|
}
|
||||||
$this->_debug('[DBmodel][record][DELETE]: ' . $query);
|
$this->_debug('[DBmodel][record][DELETE]: ' . $query);
|
||||||
$ret = $this->query($query);
|
$ret = $this->query($query);
|
||||||
if ($ret === false) {
|
if ($ret === false) {
|
||||||
@ -548,6 +560,15 @@ class DBmodel
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getTableColumns($table_name) {
|
public function getTableColumns($table_name) {
|
||||||
|
$db_type = $this->getDBtype();
|
||||||
|
switch ($db_type) {
|
||||||
|
case 'mysql': return $this->getTableColumnsMYSQL($table_name);
|
||||||
|
case 'sqlite': return $this->getTableColumnsSQLITE($table_name);
|
||||||
|
default: new \Exception('Unknown DB type: ' . $db_type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableColumnsMYSQL($table_name) {
|
||||||
$desc = $this->getAll(sprintf('DESC %s', $table_name));
|
$desc = $this->getAll(sprintf('DESC %s', $table_name));
|
||||||
$desc = $this->arrayKeysToLowerCase($desc);
|
$desc = $this->arrayKeysToLowerCase($desc);
|
||||||
$pks = array();
|
$pks = array();
|
||||||
@ -567,6 +588,26 @@ class DBmodel
|
|||||||
return array('pks' => $pks, 'columns' => $columns, 'types' => $types);
|
return array('pks' => $pks, 'columns' => $columns, 'types' => $types);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getTableColumnsSQLITE($table_name) {
|
||||||
|
$desc = $this->getAll(sprintf('PRAGMA table_info(%s)', $table_name));
|
||||||
|
$desc = $this->arrayKeysToLowerCase($desc);
|
||||||
|
$pks = array();
|
||||||
|
$columns = array();
|
||||||
|
foreach ($desc as $d) {
|
||||||
|
$colname = $d['name'];
|
||||||
|
$types[$colname] = $d['type'];
|
||||||
|
if ($d['pk'] == 1) {
|
||||||
|
$pks[] = $colname;
|
||||||
|
if (strtoupper($d['type']) != 'INTEGER') {
|
||||||
|
$columns[] = $colname;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$columns[] = $colname;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return array('pks' => $pks, 'columns' => $columns, 'types' => $types);
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------
|
/* ----------------------------------------------------
|
||||||
* HELPER METHODS
|
* HELPER METHODS
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -81,10 +81,21 @@ class Maintenance
|
|||||||
|
|
||||||
public function existsTable($table_name)
|
public function existsTable($table_name)
|
||||||
{
|
{
|
||||||
|
$db_type = $this->dbh->getDBtype();
|
||||||
|
switch ($db_type) {
|
||||||
|
case 'mysql':
|
||||||
return $this->testDB(
|
return $this->testDB(
|
||||||
'SHOW TABLES LIKE "' . $table_name . '"',
|
'SHOW TABLES LIKE "' . $table_name . '"',
|
||||||
$table_name
|
$table_name
|
||||||
);
|
);
|
||||||
|
case 'sqlite':
|
||||||
|
return $this->testDB(
|
||||||
|
'SELECT name FROM sqlite_master WHERE TYPE = "table" AND name LIKE "' . $table_name . '"',
|
||||||
|
$table_name
|
||||||
|
);
|
||||||
|
default:
|
||||||
|
new \Exception('Unknown DB type: ' . $db_type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkDBTable($table_name, $definition, $after_definition = '')
|
public function checkDBTable($table_name, $definition, $after_definition = '')
|
||||||
@ -93,9 +104,21 @@ class Maintenance
|
|||||||
$this->lastMessage = 'Table ' . strtoupper($table_name) . ' - invalid index';
|
$this->lastMessage = 'Table ' . strtoupper($table_name) . ' - invalid index';
|
||||||
return Maintenance::ABNORMAL;
|
return Maintenance::ABNORMAL;
|
||||||
}
|
}
|
||||||
|
$check_query = '';
|
||||||
|
$db_type = $this->dbh->getDBtype();
|
||||||
|
switch ($db_type) {
|
||||||
|
case 'mysql':
|
||||||
|
$check_query = 'SHOW TABLES LIKE "' . $table_name . '"';
|
||||||
|
break;
|
||||||
|
case 'sqlite':
|
||||||
|
$check_query = 'SELECT name FROM sqlite_master WHERE TYPE = "table" AND name LIKE "' . $table_name . '"';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
new \Exception('Unknown DB type: ' . $db_type);
|
||||||
|
}
|
||||||
$status = $this->checkDB(
|
$status = $this->checkDB(
|
||||||
// TEST query
|
// TEST query
|
||||||
'SHOW TABLES LIKE "' . $table_name . '"',
|
$check_query,
|
||||||
// TEST output
|
// TEST output
|
||||||
$table_name,
|
$table_name,
|
||||||
// FIX query
|
// FIX query
|
||||||
|
|||||||
Reference in New Issue
Block a user