nozerrat/daniia

Daniia ORM 框架

dev-master 2018-09-11 15:57 UTC

This package is not auto-updated.

Last update: 2024-09-26 17:26:26 UTC


README

License

Daniia

这是一个基于 ORM ActiveRecord 设计模式的 PHP 对象关系映射 (ORM) 框架。

安装

Composer

使用 Composer 安装,只需安装此包的最新版本。

composer require nozerrat/daniia dev-master

要求

  • PHP >= 5.3
  • PDO

支持的数据库引擎

Daniia ORM 兼容以下数据库

  • MySQL 5.1+
  • Postgres 8+
  • SQLite3
  • SQLServer 2008+
  • Oracle

数据库连接

首先需要声明常量,然后注册连接数据以便使用 Daniia 框架,常量包括 USER、PASS、SCHEMA 和 DSN

例如

// Conexión con la Base de Datos MySql
define("USER","root");
define("PASS","1234");
define("DSN","mysql:port=3306;host=localhost;dbname=test");

另一个示例

// Conexión con la Base de Datos PostgreSql
define("USER","postgres");
define("PASS","1234");
define("SCHEMA","public");
define("DSN","pgsql:port=5432;host=localhost;dbname=postgres");

实例化 Daniia ORM

use Daniia\Daniia;
$daniia = new Daniia();
$daniia->table('personas')->get();// consultamos todos los datos

如果继承 Daniia 类,则必须继承 BaseDaniia 类

use Daniia\Daniia;
use Daniia\BaseDaniia;
class Personas extends BaseDaniia {
   protected $table = "personas"; //Nombre de la tabla
   protected $primaryKey = "id"; //Clave primaria de la tabla
}
$personas = new Personas();
$personas->get();// consultamos todos los datos

也可以从 Daniia 实例更改 primaryKey

$daniia->primaryKey("id");

使用和示例

使用 Daniia ORM 非常简单,这里我们将应用一些框架使用的示例

插入

// Insert simple
$daniia->table("personas")->insert(["ci"=>1,"nombre"=>"Carlos","apellido"=>"Garcia"]);

// Insert multiples
$daniia->table("personas")->insert([
   ["ci"=>1,"nombre"=>"Carlos","apellido"=>"Garcia"],
   ["ci"=>2,"nombre"=>"Carlos","apellido"=>"Garcia"],
   ["ci"=>3,"nombre"=>"Carlos","apellido"=>"Garcia"],
]);

更新

// Update simple
$daniia->table("personas")->primaryKey("id")->update(["id"=>1,"ci"=>"1111","nombre"=>"aa","apellido"=>"aa"]);

// o en caso de que la ID no este esablecida en los datos
$daniia->table("personas")->where("id",1)->update(["ci"=>"1111","nombre"=>"aa","apellido"=>"aa"], true/*Ignorar primaryKey*/);

// Update multiples
$daniia->table("personas")->primaryKey("id")->update([
   ["id"=>1,"ci"=>4,"nombre"=>"Petra","apellido"=>""],
   ["id"=>2,"ci"=>5,"nombre"=>"José","apellido"=>"Jill"],
   ["id"=>3,"ci"=>6,"nombre"=>"Jhon","apellido"=>"Peña"],
]);

删除

$daniia->table("personas")->where("id",2)->delete();

$daniia->table("personas")->delete(3);
$daniia->table("personas")->delete([3]);

$daniia->primaryKey('id')->table("personas")->delete(6,7);
$daniia->primaryKey('id')->table("personas")->delete([6,7]);

$daniia->primaryKey('id')->table("personas")->find(8)->delete();
$daniia->primaryKey('id')->table("personas")->find([8])->delete();

选择

$daniia->table('personas')->select()->get();

$daniia->table('personas')->select('COUNT(*)')->first();

$daniia->table('personas')->select('ci','nombre')->first();
$daniia->table('personas')->select(['ci','nombre'])->first();

有效的运算符

Daniia 框架支持的运算符有:=, <, >, <=, >=, <>, !=, like, not like, in, is, is not, ilike, between, not between。

例如

/**
 * OPERADORES VALIDOS
 **/
$daniia->table("personas")->where("id","4")->first();// por defecto es '='

$daniia->table("personas")->where("id",'=',"4")->first();

$daniia->table("personas")->where("id",'like',"4")->first();

$daniia->table("personas")->where("id",["4"])->first();// si es un array por default es 'IN'

$daniia->table("personas")->where("id",'in',["4"])->first();

$daniia->table("personas")->where("id",'is',"true",false)->first();//el parametro false indica no escapar valor
// o puede usar en este caso 
$daniia->table("personas")->where("id is true")->first();

table 方法用于指定要查询的表的名称

$daniia->table('personas')->first();
$daniia->table(['personas'])->first();

// realizamos un JOIN
$daniia->table('personas','oficina')->first();
$daniia->table(['personas','oficina'])->first();

from 方法类似于 table 方法,用于指定要查询的表名,但如果在参数中指定闭包,则表示在 from 子句中包含的子查询。

$daniia->from('personas')->first();
$daniia->from(['personas'])->first();

$daniia->from('personas','oficina')->first();
$daniia->from(['personas','oficina'])->first();

// especificamos un sub-query
$daniia->from(function (Daniia $daniia) {
   $daniia->table("personas");
})->first();

// con alias para el sub-query contenido en el método from
$daniia->from(function (Daniia $daniia) {
   $daniia->table("personas");
}, "myAlias")->first();

// otro ejemplo de sub-query anidado contenido en el clausula from
$daniia->from(function (Daniia $daniia) {
   $daniia->from(function (Daniia $daniia) {
      $daniia->from(function (Daniia $daniia) {
         $daniia->table("personas");
      }, "C");
   }, "B");
}, "A")->first();

// otro ejemplo 
$daniia
->select("P.id","P.nombre","P.apellido")
->from(function (Daniia $daniia) {
   $daniia
   ->table("personas")
   ->select("personas.id","personas.nombre","personas.apellido");
}, 'P')->first();

Join, LeftJoin, RightJoin

// Join alternativa
$daniia->table('personas','oficina')->where('personas.id','oficina.id_personas',false)->first();

$daniia->table('personas')->join("oficina","personas.id","oficina.id_personas")->first();

$daniia->table('personas')->innerJoin("oficina","personas.id","=","oficina.id_personas")->first();

$daniia->table('personas')->leftJoin("oficina","personas.id","oficina.id_personas")->first();

$daniia->table('personas')->rightJoin("oficina","personas.id","oficina.id_personas")->first();

$daniia->table('personas')->rightJoin("oficina",['personas.id'=>[4,5,6,7]])->first();

$daniia->table("personas")->join('oficina',"personas.id",function(Daniia $query) {
   $query->select("personas.id")->from("personas")->where("personas.id","4")->limit(1);
})->first();


$daniia->table('personas')->join("oficina",function(Daniia $daniia) {
   $daniia
      ->on("personas.id",TRUE)
      ->on("personas.id",FALSE)
      ->on("personas.id",NULL)
      ->on("personas.id",[TRUE,FALSE,NULL])
      ->on("personas.id",[1,2,3,4])
      ->on("personas.id","oficina.id_personas")

      ->on( ["personas.id"=>"oficina.id_personas"] )
      ->on( ["personas.id <>"=>"oficina.id_personas"] )

      ->orOn("personas.id",'<>',"oficina.id_personas")
      ->andOn("personas.id","holas",true) //Escapamos el valor
})->first();

 $daniia->table('personas')->join("oficina alias_a",function(Daniia $daniia) {
   $daniia->on(function(Daniia $daniia) {
      $daniia->on("personas.id","alias_a.id_personas");
   });
})->join("oficina alias_b",function(Daniia $daniia) {
   $daniia->on("personas.id",'=',function(Daniia $daniia) {
      $daniia->table('oficina')->select('id_personas')->where('id_personas',4);
   });
})->first();

$daniia->table('personas')->join("oficina",function(Daniia $daniia) {
   $daniia->on("personas.id",function(Daniia $daniia) {
      $daniia->select("personas.id")->from("personas")->where("personas.id","4")->limit(1);
   });
})->first();

Get, GetArray

$daniia->table('personas')->get();

$daniia->table('personas')->getArray();

// en caso de que queramos realizar filtros en los datos consultados y queramos contituar consultando solo pasamos un Closure al método get o getArray y lo retornamos
$daniia->table('personas')->get(function( $data, Daniia $daniia ){
   // realizar algún filtro
   return $data;
});

$daniia->table('personas')->getArray(function( $data, Daniia $daniia ){
   // realizar algún filtro
   return $data;
});

List

$daniia->table('personas')->lists('nombre');

$daniia->table('personas')->lists('nombre','id');

$daniia->table('personas')->lists('nombre',function( $data, Daniia $daniia ){
   // realizar algún filtro
   return $data;
});

$daniia->table('personas')->lists('nombre','id',function( $data, Daniia $daniia ){
   // realizar algún filtro
   return $data;
});

Find

$daniia->table('personas')->find(); // Consulta Todos

$daniia->table('personas')->where('id',1)->find();

$daniia->table('personas')->find(1);
$daniia->table('personas')->find([1]);

$daniia->table('personas')->find(1,2);
$daniia->table('personas')->find([1,2]);

$daniia->table('personas')->find(2);
echo $daniia->id;
echo $daniia->ci;
echo $daniia->nombre;
echo $daniia->apellido;

$daniia->table('personas')->find(1,2,function($data, Daniia $daniia) {
   // realizar algún filtro
   return $data;
});

$daniia->table('personas')->find([1,2],function($data, Daniia $daniia) {
   // realizar algún filtro
   return $data;
});

First, FirstArray

$daniia->table('personas')->first();
$daniia->table('personas')->firstArray();

$daniia->table('personas')->where('id',1)->first();
$daniia->table('personas')->where('id',1)->firstArray();

$daniia->table('personas')->primaryKey('id')->find([1,2])->first();
$daniia->table('personas')->primaryKey('id')->find([1,2])->firstArray();

$daniia->table('personas')->first(function($data, Daniia $daniia) {
   // realizar algún filtro
   return $data;
});

$daniia->table('personas')->firstArray(function($data, Daniia $daniia) {
   // realizar algún filtro
   return $data;
});

$daniia->table('personas')->primaryKey('id')->find([1,2],function($data, Daniia $daniia) {
   // realizar algún filtro
   return $data;
})->first(function($data, Daniia $daniia) {
   // realizar algún filtro
   return $data;
});

Save

$daniia->table('personas')->find(2);
$daniia->nombre = "yyyyyyyy";
$daniia->save();//UPDATE

$daniia->table('personas')->find(1,2)->first();
$daniia->nombre = "yyyyyyyy";
$daniia->save();//UPDATE

// Cuendo la función find esta sin argumento es obligatorio
// usar la función first para extraer los datos del Array
// consultado
$daniia->table('personas')->where('id',1)->find()->first();
$daniia->nombre = "yyyyyyyy";
$daniia->save();//UPDATE

$daniia->table('personas')->find('00')->first(); // registro no existe..
$daniia->ci       = "123456789";
$daniia->nombre   = "Carlos";
$daniia->apellido = "Garcia";
$daniia->save();//INSERT

$daniia->table('personas');
$daniia->ci       = "123456789";
$daniia->nombre   = "Carlos";
$daniia->apellido = "Garcia";
$daniia->save();//INSERT

$daniia->table('personas')->find()->first();
$daniia->ci       = "123456789";
$daniia->nombre   = "Carlos";
$daniia->apellido = "Garcia";
$daniia->save(function($data, Daniia $daniia) {
   // Si la actualización es exitosa devuelve los datos actualizado
   // sino, devuelve los datos insertado
   return $data;
});//UPDATE

Where

$daniia->table("personas")->where("id","1")->first();

$daniia->table("personas")->where("id",'=',"1")->first();

$daniia->table("personas")->where("id","4")->andWhere("id","4")->first();

$daniia->table("personas")->where("id",4)->orWhere("id",4)->first();

$daniia->table("personas")->where("id",[4,5,6,7])->first();

$daniia->table("personas")->where("id",'in',[4,5,6,7])->first();

$daniia->table("personas")->where(function (Daniia $daniia) {
   $daniia->where("id",4)->andWhere("apellido","LIKE","%garcia%");
})->first();

$daniia->table("personas")->where("id",FALSE)->orWhere("id",TRUE)->orWhere("id",NULL)->first();

$daniia->table("personas")->where("id",'=',FALSE)->orWhere("id",'=',TRUE)->orWhere("id",'=',NULL)->first();

$daniia->table("personas")->where("id",[TRUE,FALSE,NULL])->first();

$daniia->table("personas")->where(function (Daniia $daniia) {
   $daniia->where("id",4);
})->orWhere(function (Daniia $daniia){
   $daniia->where("id",4);
})->first();

$daniia->table("personas")->where(function (Daniia $daniia) {
   $daniia->where("id","1")->orWhere(function (Daniia $daniia) {
      $daniia->where("id","2")->andWhere(function (Daniia $daniia) {
         $daniia->where("id","3");
      });
   });
})->first();

$daniia->table("personas")->where("personas.id",function($query) {
   $query->table("personas")->select("id")->where("id",4)->limit(1);
})->first();

$daniia->table("personas")->where("personas.id","=",function($query) {
   $query->table("personas")->select("id")->where("id",4)->limit(1);
})->first();

$daniia->table("personas")->where("id",'in',function(Daniia $daniia){
   $daniia->table('personas')->select('id');
})->first();




$daniia->table("personas")->where(['nombre'=>'carlos'])->first();

$daniia->table("personas")->where(['nombre !='=>'carlos'])->first();

$daniia->table("personas")->where(['nombre'=>[4,5,6,7]])->first();

$daniia->table("personas")->where(['nombre in'=>[4,5,6,7]])->first();

$daniia->table("personas")->where(["personas.id"=>function(Daniia $daniia) {
   $daniia->table("personas")->select()->where("id",4)->limit(1);
}])->first();

$daniia->table("personas")->where(["personas.id !="=>function(Daniia $daniia) {
   $daniia->table("personas")->select()->where("id",4)->limit(1);
}])->first();

Having

$daniia->table("personas")->having("id","1")->first();

$daniia->table("personas")->having("id",'=',"1")->first();

$daniia->table("personas")->having("id","4")->andHaving("id","4")->first();

$daniia->table("personas")->having("id",4)->orHaving("id",4)->first();

$daniia->table("personas")->having("id",[4,5,6,7])->first();

$daniia->table("personas")->having("id",'in',[4,5,6,7])->first();

$daniia->table("personas")->having(function (Daniia $daniia) {
   $daniia->having("id",4)->andHaving("apellido","LIKE","%garcia%");
})->first();

$daniia->table("personas")->groupBy( "id" )->having("id",false)->having("id",true)->having("id",null)->first();

$daniia->table("personas")->groupBy( "id" )->having("id",'=',false)->having("id",'=',true)->having("id",'=',null)->first();

$daniia->table("personas")->groupBy( "id" )->having("id",[true,false,null])->first();

$daniia->table("personas")->having(function (Daniia $daniia) {
   $daniia->having("id",4);
})->orHaving(function (Daniia $daniia){
   $daniia->having("id",4);
})->first();

$daniia->table("personas")->having(function (Daniia $daniia) {
   $daniia->having("id","1")->orHaving(function (Daniia $daniia) {
      $daniia->having("id","2")->andHaving(function (Daniia $daniia) {
         $daniia->having("id","3");
      });
   });
})->first();

$daniia->table("personas")->having("personas.id",function(Daniia $daniia) {
   $daniia->table("personas")->select("id")->having("id",4)->limit(1);
})->first();

$daniia->table("personas")->having("personas.id","=",function(Daniia $daniia) {
   $daniia->table("personas")->select("id")->having("id",4)->limit(1);
})->first();

$daniia->table("personas")->having("id",'in',function(Daniia $daniia){
   $daniia->table('personas')->select('id');
})->first();

Union

$daniia->table("personas")->where('id',1)->union(function (Daniia $daniia) {
   $daniia->table("personas")->where('id',1);
})->get();

$daniia->table("personas")->select('id')->union(function (Daniia $daniia) {
   $daniia->table("oficina")->select('id_personas AS id');
})->get();

$daniia->table("personas")->select('id')->where('id',1)->union(function (Daniia $daniia) {
   $daniia->table("oficina")->select('id_personas AS id')->where('id_personas',4);
})->get();

$daniia->table("personas")->where('id',1)->union(function (Daniia $daniia) {
   $daniia->table("personas")->where('id',1);
})->union(function (Daniia $daniia) {
   $daniia->table("personas")->where('id',1);
})->limit(1)->get();

Order By

$daniia->table("personas")->orderBy("ci")->get();
$daniia->table("personas")->orderBy(["ci"])->get();

$daniia->table("personas")->orderBy("apellido","nombre")->get();
$daniia->table("personas")->orderBy(["apellido","nombre"])->get();

// al final se indica el tipo de orden 
$daniia->table("personas")->orderBy("apellido","nombre",'asc')->get();
$daniia->table("personas")->orderBy(["apellido","nombre",'desc'])->get();

Group By

$daniia->table("personas")->groupBy("ci")->first();
$daniia->table("personas")->groupBy(["ci"])->get();

$daniia->table("personas")->groupBy("apellido","nombre")->get();
$daniia->table("personas")->groupBy(["apellido","nombre"])->get();

Limit

$daniia->table("personas")->limit("1")->get();
$daniia->table("personas")->limit(["1"])->get();

$daniia->table("personas")->limit("1","0")->get();
$daniia->table("personas")->limit(["1","0"])->get();

Offset

$daniia->table("personas")->limit("1")->offset("0")->get();

其他

// Obtiene la última ID insertada en la base de datos
$daniia->lastId();

// Obtiene el última Query ejecutado
$daniia->lastQuery();

// Obtiene los últimos datos consultados
$daniia->getData();

API

Daniia {
   // Obtener datos resultante despues de la ejecución 
   public integer lastId( void );
   public mixed lastQuery( void );
   public mixed getData( void );
   public array error( void );

   // Escape de cadenas de caracteres
   public string quote( void );

   // Sentencia para transación
   public Daniia begin( void );
   public Daniia commit( void );
   public Daniia rollback( void );

   // ejecutar sentencias SQL
   public object query( string $sql [, Closure $closure] );
   public array queryArray( string $sql [, Closure $closure] );

   // Obtiener los campos de la tabla especificada
   public array columns( string $table = null );

   // ejecutar Query Builder
   public array get( [Closure $closure] );
   public array getArray( [Closure $closure] );
   public array all( [Closure $closure] );
   public array allArray( [Closure $closure] );
   public object first( [Closure $closure] );
   public array firstArray( [Closure $closure] );
   public array lists( string $column [, string $index = null | Closure $closure ] [, Closure $closure] );
   public bool save( [Closure $closure] );
   public Daniia find( [string $ids [, ...] | array $ids] [, Closure $closure] );

   public bool truncate( void );
   public int insertGetId( array $datas );
   public bool insert( array $datas [, $returning_id = false]  ); // $returning_id solo para PostgresSql
   public bool update( [array $datas] );
   public bool delete( [string $ids [, ...] | array $ids = []] );
   
   // Query Builder
   public Daniia primaryKey( string $primaryKey );
   public Daniia table( string $table [, ...] | array $table );
   public Daniia select( string $select [, ...] | array $select );
   public Daniia from( string $table [, ...] | array $table | Closure $table [, string $aliasFrom = ""] );
   public Daniia join( string $table, string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia innerJoin( string $table, string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia leftJoin( string $table, string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia rightJoin( string $table, string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia on( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia orOn( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia andOn( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia where( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia orWhere( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia andWhere( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia union( Closure $closure );
   public Daniia having( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia orHaving( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia andHaving( string $column | Closure $column [, string $operator = null | Closure $operator [, string $value = null | Closure $value | bool $value [, bool $scape_quote = false ]]] );
   public Daniia groupBy( string $fields | array $fields );
   public Daniia orderBy( string $fields | array $fields );
   public Daniia limit( int $limit [, int $offset = null ] | array $limit );
   public Daniia offset( int $offset);
}