cleup/database

Fast and elegant library for working with a database

1.0.1 2024-08-20 10:31 UTC

This package is auto-updated.

Last update: 2024-09-20 10:47:55 UTC


README

Installation

Install the cleup/database library using composer:

composer require cleup/database

Usage

Configuration
use Cleup\Core\Database\Db;

Db::config([
    'type'     => 'mysql', // pgsql, sybase, oracle, mssql, sqlite
    'host'     => 'localhost',
    'database' => 'db_name',
    'username' => 'db_user',
    'password' => '',
    'port'     => 3306,
    'charset'  => 'utf8mb4',
    'prefix'   => '',
]);
Methods
use Cleup\Core\Database\Db;

# Select
// select("table name", "colums", "where|order|limit")
Db::select("users", "name");           // Single
Db::select("users", ["id", "name"]);   // Using an array
Db::select("users", "*");              // All columns
Db::select("users", "name", [          // Where syntax
    "email" => "mail@example.com",     // WHERE email = "mail@example.com"
    "id[>]" => 1,                      // WHERE id > 1
    "id[<]" => 2,                      // WHERE id < 2
    "id[>=]" => 7,                     // WHERE id >= 7
    "id[!]" => 5,                      // WHERE id != 5
    "age[<>]" => [20, 97],             // WHERE id BETWEEN 20 AND 97
    "age[<>]" => [30, 50],             // WHERE id NOT BETWEEN 30 AND 50
    "name[~]" => "Jimmy",              // WHERE "name" LIKE '%Jimmy%'
    "name[!~]" => "Jimmy",             // WHERE "name" NOT LIKE '%Jimmy%'
    "OR" => [                          // WHERE id IN (1,5,7) OR email IN ('mail@example.com', 'user@example.com')
        "id" => [1, 5, 7],
        "email" => [
            "mail@example.com", 
            "user@example.com"
        ]
    ],
    "AND" => [                         // WHERE id != 3 AND age = 22
        'id[!]' => 3,
        'age' => 22
    ],
    "ORDER" => "id",                   // ORDER BY FIELD(`id`, 12,15),`name`,`date` DESC
    "ORDER" => [                      
        "id" => [12, 15],
        "name",
        "date" => "DESC"
    ],
    "LIMIT" => 50,                     // LIMIT 50
    "LIMIT" => [10, 50]                // LIMIT 50 OFFSET 10
]);
Db::select("users", "name", [          // Raw
    "ORDER" => Db::raw('RAND()'),
    'LIMIT' => Db::raw('AVG(<age>)')
    'date' => Db::raw('NOW()')
]);    

# Insert
Db::insert("articles", [
    "title" => "My life",
    "email" => "<p></p>",
    "active" => 1
]);
$articleId = $database->id();

# Update
Db::update("articles", [
    "active" => 0,
    "views[+]" => 1,                    // Plus one to the current value 
    "views[-]" => 1,                    // Subtract one to the current value
]);

# Delete
Db::delete("articles", ['id' => 3])
Db::delete("articles", [
    "AND" => [
        "type" => "books",
        "views[<]" => 18
    ]
]);

# Replace
Db::replace("articles", [
    "type" => [
        "article" => "new_article",
        "tasks" => "new_task"
    ],
    "column" => [
        "old_value" => "new_value"
    ]
], [
    "id[>]" => 30
]);

# Get
$email = Db::get("users", "email", [     // $email = "mail@example.com"
    "id" => 1
]);

# Has 
$isAccount = Db::has("users", [          // true | false
    "id"=> 2, 
    'verified' => 'Y'
]);

# Rand
$data = Db::rand("users", "*", [
    'id[>]' => 50
]);

# Count
$count = $database->count("users", [     // 100
    "gender" => "female"
]);

# Query
// The query syntax automatically creates a table prefix and analyzes the data to prepare for execution
$data = Db::query("SELECT <name>, <email> FROM <users>")->fetchAll();
$data = Db::query("SELECT * FROM <users> WHERE <name> = :name AND <age> = :age", [ // Prepared statement
    ":name" => "Mister X",
    ":age" => 18
])->fetchAll(); 

# Quote 
$name = Db::quote("Edward");
$string = "My name is " . $name; // $string = "My name is  \'Edward\'"

# Create Table
Db::create("users", [
    "id" => [
        "INT",
        "NOT NULL",
        "AUTO_INCREMENT",
        "PRIMARY KEY"
    ],
    "name" => [
        "VARCHAR(30)",
        "NOT NULL"
    ]
], [
	"ENGINE" => "MyISAM",
	"AUTO_INCREMENT" => 5
]);

# Drop table
Db::drop("users");

# Logging
Db::insert("users", ["name" => "Edward"]);
$users = Db::select("users", "name", ['id' => 21]);
$log = Db::log(); 
/*
$log = array(
    0 => "INSERT INTO "users" ("name") VALUES (\'Edward\')",
    1 => "SELECT "name" FROM "users" WHERE "id" = 21"
);
*/

Based on Medoo Database Framework