Effectra 数据库包。

v3.0.4 2023-12-12 16:45 UTC

This package is auto-updated.

Last update: 2024-09-12 20:16:36 UTC


README

Effectra\Database 是一个 PHP 包,提供数据库连接和查询执行功能。它提供了一个方便的接口来与不同的数据库驱动程序交互并执行常见的数据库操作。

安装

您可以通过 Composer 安装 Effectra\Database 包。只需运行以下命令

composer require effectra/db

使用方法

连接

为了建立数据库连接,您需要创建一个 Connection 类的实例并调用 connect 方法。connect 方法从提供的配置文件中检索数据库配置,并返回一个表示数据库连接的 PDO 对象。

use Effectra\Database\Connection;
use Effectra\Database\Diver;
use Effectra\Config\ConfigDB;

// Create a new instance of the Connection class

$mysqlConfig = [
    'driver' => 'mysql',
    'host' => 'localhost',
    'database' => 'your_database_name',
    'username' => 'your_mysql_username',
    'password' => 'your_mysql_password',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    // Add any additional options if needed
];

$connection = new Connection($mysqlConfig);

默认情况下,Connection 类支持 MySQL 和 SQLite 数据库驱动程序。您可以通过实现 DriverInterface 并相应地配置 Connection 类来轻松添加对其他数据库驱动程序的支持。

查询执行

一旦建立了数据库连接,您可以使用 DB 类执行查询。DB 类提供了执行常见数据库操作(如 selectinsertupdatedelete)的方法。

use Effectra\Database\DB;

// Establish the database connection
DB::createConnection($con);
// Establish the database event dispatcher
DB::setEventDispatcher(new EventDispatcher());

// Create a new instance of the DB class
$db = new DB();

// Execute a select query
$data = $db->withQuery('SELECT * FROM users')->get();

// Execute an insert query
$db->table('users')->data(['name' => 'Jane Doe','email'=> 'janeDoe@mail.com'])->insert();

// Execute an update query
$db->table('users')->data(['name' => 'Jane Doe'])->update((new Condition())->where(['id' => 2]));

DB 类提供了一个流畅的接口来构建和执行查询。您可以通过链式方法轻松构建复杂的查询。

错误处理

如果在查询执行期间发生错误,DB 类将抛出 DatabaseException。您可以捕获并处理此异常以优雅地处理数据库错误。

use Effectra\Database\Exception\DatabaseException;

try {
    $db->table('users')->insert( ['name' => 'John Doe']); // Missing 'email' field
} catch (DatabaseException $e) {
    // Handle the exception
    echo "Database Error: " . $e->getMessage();
}

模型

  1. 命名空间: 模型是 Effectra\Database 命名空间的一部分。

  2. 特质: 模型使用了 ModelEventTrait 特质。

  3. 属性

    • $connection:代表数据库连接的 DBInterface 实例。
    • $schema:包含模型模式的数组。
    • $entries:包含模型条目的数组。
    • $table:与模型关联的表名。
    • $primaryKey:模型的键(默认为 'id')。
    • $keyType:主键的数据类型(默认为 'int')。
    • $incrementing:表示模型的 ID 是否自增(默认为 true)。
    • const CREATED_ATconst UPDATED_AT:表示 "创建时间" 和 "更新时间" 列的常量。
    • $options:模型的附加选项。
    • private static $query:用于存储最后执行的数据库查询的静态属性。
  4. 构造函数

    • 如果未提供,构造函数将设置表名。
  5. 方法

    • isEntriesCreated():检查模型是否已创建条目。
    • createModelStructure():创建模型的模式,包括模式和条目。
    • getDatabaseConnection():获取一个新的数据库连接实例。
    • createSchema():通过从数据库获取元数据来创建模型的模式。
    • isSchemaCreated():检查模型是否已创建模式。
    • createEntriesFromSchema():根据模式为模型创建条目。
    • 设置、获取和操作选项的各种方法。
    • getSchema($property):获取特定属性的架构条目。
    • getEntries():获取模型的条目。
    • hasEntry($property):检查模型中是否存在特定条目。
    • getEntry($property):获取模型中特定条目的值。
    • setEntries($entries):设置模型的条目。
    • setEntry($property, $value):设置模型的特定条目。
    • removeEntry($property):从模型中移除特定条目。
    • 各种魔术方法(__invoke__set__get__toString__isset__unset__callStatic__call)用于动态属性访问和方法调用。
    • toArray():将模型转换为数组表示形式。
    • toJson($flags = 0, $depth = 512):将模型转换为JSON表示形式。
    • save():将模型保存到数据库。
    • update():在数据库中更新模型。
    • transaction($callback, ...$args):在事务中执行模型操作。
    • saveInTransaction($data = []):在事务中保存模型。
    • updateInTransaction():在事务中更新模型。
    • 从数据库检索模型的方法(getalllimitfindfindBysearchwherebetween)。
    • 从数据库删除模型的方法(deletedeleteByIddeleteByIdsdeleteByIdsInTransaction)。
    • truncate():截断模型的表。
    • lastInsertId():获取模型最后插入的ID。
    • validateId($id):验证模型ID。
    • setQuery($query):设置模型的查询实例。
    • getQueryUsed():获取模型使用的查询实例。
    • getQueryUsedAsString():获取模型使用的查询实例作为字符串。
    • dd():使用Symfony的VarDumper转储模型类。

总的来说,此模型为PHP应用程序中的数据库交互提供了一个灵活且可扩展的基础。它包括CRUD操作、查询构建和事务管理功能。此外,它利用特质来处理模型事件,并使用Symfony的VarDumper进行调试。

基本用法

创建模型

class User extends Model {
    
}

检索记录

$user = User::find(1);
print_r($user);

echo $user->id;
// or use method
echo $user->getId();

更新记录

$user->name = 'Foo Bar';
// or use method
$user->setName('Foo Bar');

$user->update();

保存记录

$user = new User();

$user->name = 'Foo Bar';
$user->email = 'FooBar@email.com';

// or use method
$user
    ->setName('Foo Bar');
    ->setEmail('FooBar@email.com');

$user->save();

贡献

欢迎为Effectra\Database包做出贡献。如果您发现任何问题或对改进有建议,请在GitHub仓库中打开一个问题或提交一个拉取请求。

许可证

Effectra\Database包是开源软件,根据MIT许可证授权。有关更多信息,请参阅LICENSE文件。