patrick-barreto/data-base

基本ORM,用于操作数据库并在模型类中进行CRUD操作变得非常简单

v1.0.0 2024-01-25 15:03 UTC

README

如果您没有带有数据库的PHP环境,可以使用此Docker环境:https://github.com/PatrickBarreto/baseBackend

此代码的下一步是

  • 实现基本DDL命令(CREATE、DROP、TRUNCATE、ALTER)

如果您有想法或pull request要提交,请提交。我们非常欢迎想法。

如何安装

composer require patrick-barreto/data-base

.env

您需要填写环境变量。如果想要简化,可以使用https://packagist.org.cn/packages/patrick-barreto/dot-env

DotEnv\DotEnv::fill(PATH_.ENV_FILE);

如何使用

仓库

//Model
class Users extends DataBaseCorrespondence {
    private static string $table = 'users';

    public static function getTable(){
        return self::$table;
    }

    public function getProperty($property){
        return $this->$property;
    }
}


//Repository
class UserRepository extends Repository{

    public function findUsers() {
        return $this->select()->setFields(['id', 'name', 'email', 'phone'])
                              ->fetchObject(false, $this->getDtoPath());
    }
}

//Using in Controller for exemple
class Users {
  use UserRepository;
  use Users;
  
  public function findUsers() {
    //This will be and instance of UserRepository, class responsable to provide methods of User Object.
    $usersRepository = new UserRepository(new Users);
    
    //This will return an instance of Users.
    $users = $usersRepository->findUsers();

  }
}

使用Crud实例

<?php

namespace Your\NameSpace

use DataBase\Crud;

$homens = new Crud('homens');
$mulheres = new Crud('mulheres');
$animais = new Crud('animais');


$homens->insert->setFields(['name'])->setValues([["Pedro"],["João"],["Paulo"]])->runQuery();

$mulheres->insert->setFields(['name'])->setValues([["Maria"],["Ana"],["Marcia"]])->runQuery();

$animais->insert->setFields(['name'])->setValues([["Gato"],["Cachorro"],["Papagaio"]])->runQuery();

$mulheres->select->setFields(['homens.name as homemName, mulheres.name as mulherName'])
                ->setInnerJoin(['table' => 'homens'], ['table' => 'mulheres'] )
                ->setWhere('homens.name = "João"');

使用Command实例

<?php

namespace Your\NameSpace

use DataBase\Actions\DML\Commands\Select;

$select = new Select;
$select->setTable('tableName');
$select->setWhereIn('nome', ['pedro', 'joão', 'josé']);
$select->fetchAssoc(true);

使用Query类

重要:请注意,在这里您可以控制要运行的内容。应用程序不会做任何事情,只会执行查询。

<?php

namespace Your\NameSpace

use DataBase\Query;

$sql = "SELECT * FROM teste";
$query = new Query;
$result = $query->runQuery($sql)->fetchAll(PDO::FETCH_ASSOC);

DML命令类资源

手动实例化或直接使用Crud实例时,情况相同

对所有下级类通用

此方法负责检查在继承此类实例的类中是否设置了表名

  public function getTableName()

此方法负责在继承此类实例的类中设置表名

  public function setTable(string $tableName)

此方法负责为继承此类实例的类中的查询设置简单Where条件

  public function setWhere(string $condition)

此方法负责为继承此类实例的类中的查询设置Where In条件

  public function setWhereIn(string $column, array $options)

此方法负责连接Inner Join命令

  public function setInnerJoin(array $joinedTable, array $newTableJoin)

此方法负责连接Right Join命令

  public function setRightJoin(array $joinedTable, array $newTableJoin)

此方法负责连接Left Join命令

  public function setLeftJoin(array $joinedTable, array $newTableJoin)

此方法负责连接Full Join命令

  public function setFullJoin(array $newTableJoin)

此方法负责连接Cross Join命令

  public function setCrossJoin(array $newTableJoin)

Select

DataBase\Actions\DML\Commands\Select

设置distinct选项,默认为false

  public function setDistinct(bool $requiereDistinct)

设置fields选项,默认为'*'

  public function setFields(array $fields)

设置limit选项

  public function setLimit(int $limit, int $offset = 0)

设置order选项,ASC或DESC

  public function setOrder(string $fields, string $order = "ASC")

设置group by选项

  public function setGroupBy(array $fields)

设置having选项

  public function setHaving(string $condition)

为Select查询构建查询语句

  public function buildQuery(bool $subquery = false)

此方法负责以关联数组的形式返回数据

  public function fetchAssoc(bool $returnAll = false)

此方法负责以类类型的对象返回数据。默认为stdClass

  public function fetchObject(bool $returnAll = false, string $class = stdClass::class)

Insert

DataBase\Actions\DML\Commands\Insert

设置ignore选项,默认为false

  public function setIgnore(bool $requiereIgnore)

设置fields选项,默认为false

  public function setFields(array $fields)

设置values选项,默认为false

  public function setValues(array $values)

使用SELECT查询设置values

  public function setInsertSelect(string $query)

为Insert查询构建查询语句

  public function buildQuery()

此方法负责运行类查询而不检索结果。

  public function runQuery()

Update

DataBase\Actions\DML\Commands\Update

此方法负责为Update查询设置SET命令

  public function setSet(array $columnValue)

为Update查询构建查询语句

  public function buildQuery()

此方法负责运行类查询而不检索结果。

  public function runQuery()

Delete

DataBase\Actions\DML\Commands\Delete

为删除查询构建查询语句

  public function buildQuery()

此方法负责运行类查询而不检索结果。

  public function runQuery()