1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/shiwolang-RapidDB

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Быстрый компонент работы с базой данных RapidDB

  • Поддержка вложенных транзакций
  • Поддержка PDO
  • Поддержка JSON
  • Поддержка коллекций экземпляров классов
  • Лёгкий вес
  • Простое объединение с другими фреймворками
  • Поддержка нескольких баз данных и соединений

Установка и использование

Установка через Composer

$ composer require shiwolang/db

Инициализация соединения

Поддерживаются только MySQL и SQLite

Одиночное соединение

DB::init([
    'database_type' => 'mysql',
    Yöntem adı: markdown
İlk dil: Çince
Son dil: Rusça
### Обновление данных (один столбец)
---------------------------------------
```php
$lastInsertId = DB::connection()->update("content", [
    "title"       => "title1",
    "content"     => "content1",
    "time"        => time()
],"id = :id", [":id" => 1]);

Поиск данных


Обратите внимание, что значения ограничения должны быть типа int!

DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->all();
```DB::connection()->query("SELECT * FROM content WHERE title = :title LIMIT :limit", [
    ":title" => "title1",
    ":limit" => 10
])->all();

```sql
DB::connection()->query("SELECT * FROM content WHERE id = ? LIMIT ?", ["title1", 10])->all();

Установка режима получения данных

Установка получения в виде массива (по умолчанию)
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->all();
Установка получения в виде коллекции объектов
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->bindToClass(Content::class)->all();
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->all(Content::class);
Получение данных, передача каждого столбца строки как аргументов в указанный метод и возврат результата вызова этого метода
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->all(function($title, $content, $time) {
    return [
        "title" => $title,
        "content" => $content,
        "time" => date("Y-m-d H:i:s", $time)
    ];
});
Получение следующей строки из связанной выборки

Получение в виде массива

DB::connection()->query("SELECT * FROM content LIMIT 10")->each(function ($row) {
    print_r($row);
});

Получение в виде коллекции объектов

DB::connection()->query("SELECT * FROM content LIMIT 10")->each(function ($row) {
    print_r($row);
}, Content::class);
JSON-формат данных

Получение в виде массива

DB::connection()->query("SELECT * FROM content LIMIT 10")->json();

Получение в виде коллекции объектов

DB::connection()->query("SELECT * FROM content LIMIT 10")->json($data, Content::className());

Внимание DB::json(&$fetchResult = null, $className = null, $args = []) Первый параметр — это возвращаемый набор результатов, а не имя связанного класса.

Примечание** При получении данных в виде объектного массива, данные автоматически форматируются. Можно использовать аннотацию @json для аннотации одного общего метода внутри класса; ключ JSON будет иметь значение имени этого метода с маленькой буквы в начале (если метод начинается с get, то эта часть игнорируется).Аналогичным образом можно реализовать интерфейсы ObjectContainerInterface и \JsonSerializable, и использовать Statement::setJsonObjectContainerClassName($jsonObjectContainerClassName) для настройки контейнера объектного массива.

Поддержка транзакций


Эта функция зависит от функциональности транзакций данных

Объявление использования транзакций

$db = DB::connection();
$db->beginTransaction();
try {
    $last_insert_id = $db->insert("content", [
        "title"       => "title1",
        "content"     => "content1",
        "time"        => time()
    ]);
    $db->commit();
} catch (\Exception $e) {
    $db->rollBack();
    throw $e;
}

Объявление использования транзакций поддерживает бесконечное количество уровней вложенности

$db = DB::connection();
$db->beginTransaction();
try {

Пример использования транзакций с использованием callback-функций, поддерживающих вложенность любой глубины

<?php

try {
    $last_insert_id = $db->insert("content", [
        "title"       => "title1",
        "content"     => "content1",
        "time"        => time()
    ]);

    $db->commit();

} catch (\Exception $e) {
    $db->rollBack();
    throw $e;

}

$last_insert_id = $db->insert("content", [
    "title"       => "title2",
    "content"     => "content2",
    "time"        => time()
]);

$db->beginTransaction();
try {
    $last_insert_id = $db->insert("content", [
        "title"       => "title3",
        "content"     => "content3",
        "time"        => time()
    ]);
    $db->commit();

} catch (\Exception $e) {
    $db->rollBack();
    throw $e;

}

$db->commit();

} catch (\Exception $e) {
    $db->rollBack();
    throw $e;
}
?>
<?php

DB::connection()->transaction(function () use ($db) {
    DB::connection()->transaction(function () use ($db) {
        DB::connection()->insert("content", [
            "title"       => "title1",
            "content"     => "content1",
            "time"        => time()
        ]);
    });
``````markdown
# Выполнение запроса на получение записей

-----------------------

#### Получение всех выполненных записей
```php
DB::connection()->query("SELECT * FROM content LIMIT 1")->all();
DB::connection()->query("SELECT * FROM content WHERE title = :title LIMIT :limit", [
    ":title" => "title1",
    ":limit" => 10
])->all();
print_r(DB::connection()->getLog());

Одиночный незапущенный SQL-запрос

$sql = DB::connection()->query("SELECT * FROM content WHERE title = :title LIMIT :limit", [
    ":title" => "title1",
    ":limit" => 10
], true);

Приложение

Класс Content

class Content
{
    private $id;
    private $title;
    private $content;

    /**
     * @return mixed
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param mixed $id
     */
    public function setId($id)
    {
        $this->id = $id;
    }

    /**
     * @return mixed
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * @param mixed $title
     */
    public function setTitle($title)
    {
        $this->title = $title;
    }

    /**
     * Для формата JSON
     * @json
     * @return mixed
     */
    public function getContent()
    {
        return $this->content . "_привет";
    }

    /**
     * @param mixed $content
     */
    public function setContent($content)
    {
        $this->content = $content;
    }
    
    public function __get($name)
    {
        $getter = 'get' . self::camelName($name);

        if (method_exists($this, $getter)) {
            return $this->$getter();
        }

        throw new \Exception('Получение неизвестного свойства: ' . get_class($this) . '::' . $name);
    }
    public function __set($name, $value)
    {
        $setter = 'set' . self::camelName($name);
        if (method_exists($this, $setter)) {
            $this->$setter($value);
        } else {
            throw new \Exception('Установка неизвестного свойства: ' . get_class($this) . '::' . $name);
        }
    }
}
``````php
            return;
        }

        throw new \Exception('Setting of unknown property: ' . get_class($this) . '::' . $name);
    }
    protected static function camelName($name, $ucfirst = true)
    {
        if (strpos($name, "_") !== false) {
            $name = str_replace("_", " ", strtolower($name));
            $name = ucwords($name);
            $name = str_replace(" ", "", $name);
        }
    }
#### SQL-запрос для создания таблицы в базе данных
```sql
CREATE TABLE `content` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) DEFAULT NULL,
  `content` VARCHAR(255) DEFAULT NULL,
  `time` INT(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

RapidDB — это легковесный компонент для работы с базами данных. * поддерживает вложенные транзакции; * работает с PDO; * поддерживает JSON; * поддерживает коллекции экземпляров классов; * имеет небольшой вес; * легко интегрируется с другими фреймворками; * поддерживает несколько баз данных и несколько подключений. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/shiwolang-RapidDB.git
git@api.gitlife.ru:oschina-mirror/shiwolang-RapidDB.git
oschina-mirror
shiwolang-RapidDB
shiwolang-RapidDB
master