Source of file PDOAdapter.php
Size: 3,331 Bytes - Last Modified: 2021-12-23T10:02:11+00:00
/var/www/docs.ssmods.com/process/src/code/Helpers/PDOAdapter.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | <?php namespace BatchWrite; use DataObject; use PDO; /** * Class PDOAdapter * @package BatchWrite */ class PDOAdapter implements DBAdapter { /** * @var PDO */ private $conn; /** * PDOAdapter constructor. * @param PDO $conn */ public function __construct(PDO $conn) { $this->conn = $conn; } /** * @param $sql * @param $params * @return bool */ public function query($sql, $params) { $stmt = $this->conn->prepare($sql); $res = $stmt->execute($params); return $res; } /** * @param $className * @param $objects * @param bool|false $setID * @param bool|false $isUpdate * @param string $tablePostfix * @return bool */ public function insertClass($className, $objects, $setID = false, $isUpdate = false, $tablePostfix = '') { $fields = DataObject::database_fields($className); $singleton = singleton($className); $fields = array_filter(array_keys($fields), function ($field) use ($singleton) { return $singleton->hasOwnTableDatabaseField($field); }); // if setting ID then add to fields if ($setID || $isUpdate) { array_unshift($fields, 'ID'); } $fieldObjects = array(); foreach ($fields as $field) { $fieldObjects[$field] = $singleton->dbObject($field); } $params = array(); foreach ($objects as $object) { foreach ($fields as $field) { $value = $object->getField($field); // need to fill in null values with appropriate values // TODO is there a better way to figure out if a value needs to be filled in? if ($value === null) { if ($fieldObjects[$field] instanceof \Int || $fieldObjects[$field] instanceof \Decimal || $fieldObjects[$field] instanceof \Float) { $value = 0; } else { $value = ''; } } $params[] = $value; } } // ClassName or ClassName_Live $tableName = $className . ($tablePostfix ? '_' . $tablePostfix : ''); // (`Field1`, `Field2`, ...) $fieldSQL = implode(', ', array_map(function ($field) { return "`{$field}`"; }, $fields)); // (?, ?, ?, ?), (?, ...), .... $inserts = implode(',', array_fill(0, count($objects), '(' . implode(',', array_fill(0, count($fields), '?')) . ')')); $sql = "INSERT INTO `{$tableName}` ({$fieldSQL}) VALUES {$inserts}"; if ($isUpdate) { $mappings = array(); foreach ($fields as $field) { if ($field !== 'ID') { $mappings[] = "`{$field}` = VALUES(`{$field}`)"; } } $mappings = implode(',', $mappings); $sql .= " ON DUPLICATE KEY UPDATE {$mappings}"; } return $this->query($sql, $params); } /** * @param $sql * @param $params * @return mixed */ public function insertManyMany($sql, $params) { return $this->query($sql, $params); } } |