|
@@ -1,4 +1,5 @@
|
|
|
<?php
|
|
<?php
|
|
|
|
|
+
|
|
|
namespace Ipol\DPD\DB;
|
|
namespace Ipol\DPD\DB;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -10,7 +11,7 @@ abstract class AbstractTable implements TableInterface
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Конструктор класса
|
|
* Конструктор класса
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @param \Ipol\DPD\DB\ConnectionInterface
|
|
* @param \Ipol\DPD\DB\ConnectionInterface
|
|
|
*/
|
|
*/
|
|
|
public function __construct(ConnectionInterface $connection)
|
|
public function __construct(ConnectionInterface $connection)
|
|
@@ -20,17 +21,17 @@ abstract class AbstractTable implements TableInterface
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Возвращает соединение с БД
|
|
* Возвращает соединение с БД
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return \Ipol\DPD\DB\ConnectionInterface
|
|
* @return \Ipol\DPD\DB\ConnectionInterface
|
|
|
*/
|
|
*/
|
|
|
- public function getConnection()
|
|
|
|
|
|
|
+ public function getConnection()
|
|
|
{
|
|
{
|
|
|
return $this->connection;
|
|
return $this->connection;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Возвращает конфиг
|
|
* Возвращает конфиг
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return \Ipol\DPD\Config\ConfigInterface
|
|
* @return \Ipol\DPD\Config\ConfigInterface
|
|
|
*/
|
|
*/
|
|
|
public function getConfig()
|
|
public function getConfig()
|
|
@@ -40,7 +41,7 @@ abstract class AbstractTable implements TableInterface
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Возвращает инстанс PDO
|
|
* Возвращает инстанс PDO
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return \PDO
|
|
* @return \PDO
|
|
|
*/
|
|
*/
|
|
|
public function getPDO()
|
|
public function getPDO()
|
|
@@ -50,7 +51,7 @@ abstract class AbstractTable implements TableInterface
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Возвращает имя класса модели
|
|
* Возвращает имя класса модели
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return array
|
|
* @return array
|
|
|
*/
|
|
*/
|
|
|
public function getModelClass()
|
|
public function getModelClass()
|
|
@@ -60,7 +61,7 @@ abstract class AbstractTable implements TableInterface
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Возвращает инстанс модели ассоциированной с таблицой
|
|
* Возвращает инстанс модели ассоциированной с таблицой
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return \Ipol\DPD\DB\Model
|
|
* @return \Ipol\DPD\DB\Model
|
|
|
*/
|
|
*/
|
|
|
public function makeModel($id = false)
|
|
public function makeModel($id = false)
|
|
@@ -72,11 +73,11 @@ abstract class AbstractTable implements TableInterface
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Создание таблицы при необходимости
|
|
* Создание таблицы при необходимости
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return void
|
|
* @return void
|
|
|
*/
|
|
*/
|
|
|
public function checkTableSchema()
|
|
public function checkTableSchema()
|
|
|
- {
|
|
|
|
|
|
|
+ {
|
|
|
$sqlPath = sprintf('%s/db/install/%s/%s.sql',
|
|
$sqlPath = sprintf('%s/db/install/%s/%s.sql',
|
|
|
$this->getConfig()->get('DATA_DIR'),
|
|
$this->getConfig()->get('DATA_DIR'),
|
|
|
$this->getConnection()->getDriver(),
|
|
$this->getConnection()->getDriver(),
|
|
@@ -87,83 +88,81 @@ abstract class AbstractTable implements TableInterface
|
|
|
$sql = file_get_contents($sqlPath);
|
|
$sql = file_get_contents($sqlPath);
|
|
|
$this->getPDO()->query($sql);
|
|
$this->getPDO()->query($sql);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Добавление записи
|
|
* Добавление записи
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @param array $values
|
|
* @param array $values
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return bool
|
|
* @return bool
|
|
|
*/
|
|
*/
|
|
|
public function add($values)
|
|
public function add($values)
|
|
|
{
|
|
{
|
|
|
- $fields = array_keys($values);
|
|
|
|
|
- $values = $this->prepareParms($values);
|
|
|
|
|
|
|
+ $fields = array_keys($values);
|
|
|
|
|
+ $values = $this->prepareParms($values);
|
|
|
$placeholders = array_keys($values);
|
|
$placeholders = array_keys($values);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
$sql = 'INSERT INTO '
|
|
$sql = 'INSERT INTO '
|
|
|
- . $this->getTableName()
|
|
|
|
|
- . ' ('. implode(',', $fields) .') VALUES ('
|
|
|
|
|
- . implode(',', $placeholders) .')'
|
|
|
|
|
- ;
|
|
|
|
|
|
|
+ . $this->getTableName()
|
|
|
|
|
+ . ' (' . implode(',', $fields) . ') VALUES ('
|
|
|
|
|
+ . implode(',', $placeholders) . ')';
|
|
|
|
|
|
|
|
return $this->getPDO()
|
|
return $this->getPDO()
|
|
|
- ->prepare($sql)
|
|
|
|
|
- ->execute($values)
|
|
|
|
|
- ? $this->getPDO()->lastInsertId()
|
|
|
|
|
- : false;
|
|
|
|
|
|
|
+ ->prepare($sql)
|
|
|
|
|
+ ->execute($values)
|
|
|
|
|
+ ? $this->getPDO()->lastInsertId()
|
|
|
|
|
+ : false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Обновление записи
|
|
* Обновление записи
|
|
|
- *
|
|
|
|
|
- * @param int $id
|
|
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param int $id
|
|
|
* @param array $values
|
|
* @param array $values
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return bool
|
|
* @return bool
|
|
|
*/
|
|
*/
|
|
|
public function update($id, $values)
|
|
public function update($id, $values)
|
|
|
{
|
|
{
|
|
|
- $fields = array_keys($values);
|
|
|
|
|
- $values = $this->prepareParms($values);
|
|
|
|
|
|
|
+ $fields = array_keys($values);
|
|
|
|
|
+ $values = $this->prepareParms($values);
|
|
|
$placeholders = array_keys($values);
|
|
$placeholders = array_keys($values);
|
|
|
-
|
|
|
|
|
- $sql = 'UPDATE '. $this->getTableName() .' SET ';
|
|
|
|
|
|
|
+
|
|
|
|
|
+ $sql = 'UPDATE ' . $this->getTableName() . ' SET ';
|
|
|
foreach ($fields as $i => $field) {
|
|
foreach ($fields as $i => $field) {
|
|
|
- $sql .= $field .'='. $placeholders[$i] .',';
|
|
|
|
|
|
|
+ $sql .= $field . '=' . $placeholders[$i] . ',';
|
|
|
}
|
|
}
|
|
|
$sql = trim($sql, ',') . ' WHERE id = :id_where';
|
|
$sql = trim($sql, ',') . ' WHERE id = :id_where';
|
|
|
|
|
|
|
|
return $this->getPDO()
|
|
return $this->getPDO()
|
|
|
- ->prepare($sql)
|
|
|
|
|
- ->execute(array_merge(
|
|
|
|
|
- $values,
|
|
|
|
|
- [':id_where' => $id]
|
|
|
|
|
- ));
|
|
|
|
|
|
|
+ ->prepare($sql)
|
|
|
|
|
+ ->execute(array_merge(
|
|
|
|
|
+ $values,
|
|
|
|
|
+ [':id_where' => $id]
|
|
|
|
|
+ ));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Удаление записи
|
|
* Удаление записи
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @param int $id
|
|
* @param int $id
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return bool
|
|
* @return bool
|
|
|
*/
|
|
*/
|
|
|
public function delete($id)
|
|
public function delete($id)
|
|
|
{
|
|
{
|
|
|
- $sql = 'DELETE FROM '. $this->getTableName .' WHERE id = :id';
|
|
|
|
|
|
|
+ $sql = 'DELETE FROM ' . $this->getTableName . ' WHERE id = :id';
|
|
|
|
|
|
|
|
return $this->getPDO()
|
|
return $this->getPDO()
|
|
|
- ->prepare($sql)
|
|
|
|
|
- ->execute([':id' => $id]);
|
|
|
|
|
|
|
+ ->prepare($sql)
|
|
|
|
|
+ ->execute([':id' => $id]);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* Выборка записей
|
|
* Выборка записей
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* $parms = "id = 1" or
|
|
* $parms = "id = 1" or
|
|
|
* $parms = [
|
|
* $parms = [
|
|
|
* 'select' => '*',
|
|
* 'select' => '*',
|
|
@@ -172,41 +171,41 @@ abstract class AbstractTable implements TableInterface
|
|
|
* 'limit' => '0,1',
|
|
* 'limit' => '0,1',
|
|
|
* 'bind' => [':id' => 1]
|
|
* 'bind' => [':id' => 1]
|
|
|
* ]
|
|
* ]
|
|
|
- *
|
|
|
|
|
- * @param string|array $parms
|
|
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param string|array $params
|
|
|
|
|
+ *
|
|
|
* @return \PDOStatement
|
|
* @return \PDOStatement
|
|
|
*/
|
|
*/
|
|
|
- public function find($parms = [])
|
|
|
|
|
|
|
+ public function find($params = [])
|
|
|
{
|
|
{
|
|
|
- $parms = is_array($parms)
|
|
|
|
|
- ? $parms
|
|
|
|
|
|
|
+ $params = is_array($params)
|
|
|
|
|
+ ? $params
|
|
|
: [
|
|
: [
|
|
|
- 'where' => $parms,
|
|
|
|
|
- ]
|
|
|
|
|
- ;
|
|
|
|
|
-
|
|
|
|
|
|
|
+ 'where' => $params,
|
|
|
|
|
+ ];
|
|
|
|
|
+
|
|
|
$sql = sprintf('SELECT %s FROM %s %s %s %s',
|
|
$sql = sprintf('SELECT %s FROM %s %s %s %s',
|
|
|
- isset($parms['select']) ? $parms['select'] : '*',
|
|
|
|
|
|
|
+ isset($params['select']) ? $params['select'] : '*',
|
|
|
$this->getTableName(),
|
|
$this->getTableName(),
|
|
|
- isset($parms['where']) ? "WHERE {$parms['where']}" : '',
|
|
|
|
|
- isset($parms['order']) ? "ORDER BY {$parms['order']}" : '',
|
|
|
|
|
- isset($parms['limit']) ? "LIMIT {$parms['limit']}" : ''
|
|
|
|
|
|
|
+ isset($params['where']) ? "WHERE {$params['where']}" : '',
|
|
|
|
|
+ isset($params['order']) ? "ORDER BY {$params['order']}" : '',
|
|
|
|
|
+ isset($params['limit']) ? "LIMIT {$params['limit']}" : ''
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
$query = $this->getPDO()->prepare($sql);
|
|
$query = $this->getPDO()->prepare($sql);
|
|
|
|
|
|
|
|
- return $query->execute($parms['bind'])
|
|
|
|
|
|
|
+ $params['bind'] = !isset($params['bind']) ? null : $params['bind'];
|
|
|
|
|
+
|
|
|
|
|
+ return $query->execute($params['bind'])
|
|
|
? $query
|
|
? $query
|
|
|
- : false
|
|
|
|
|
- ;
|
|
|
|
|
|
|
+ : false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Выборка одной записи, псевдномим над find limit 0,1
|
|
* Выборка одной записи, псевдномим над find limit 0,1
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @param int|string|array $parms
|
|
* @param int|string|array $parms
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return array
|
|
* @return array
|
|
|
*/
|
|
*/
|
|
|
public function findFirst($parms = [])
|
|
public function findFirst($parms = [])
|
|
@@ -224,16 +223,16 @@ abstract class AbstractTable implements TableInterface
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Составляет массив bind-values для передачи в PDO
|
|
* Составляет массив bind-values для передачи в PDO
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @param array $parms
|
|
* @param array $parms
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @return array
|
|
* @return array
|
|
|
*/
|
|
*/
|
|
|
protected function prepareParms($parms)
|
|
protected function prepareParms($parms)
|
|
|
{
|
|
{
|
|
|
$ret = array();
|
|
$ret = array();
|
|
|
foreach ($parms as $k => $v) {
|
|
foreach ($parms as $k => $v) {
|
|
|
- $ret[':'. $k] = $v;
|
|
|
|
|
|
|
+ $ret[':' . $k] = $v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return $ret;
|
|
return $ret;
|