Alpha 是基于 Doctrine DBAL 构建的 Silex/Flex 微 ORM

v0.5.1 2020-03-12 12:50 UTC

README

Alpha ORM 是基于 Doctrine DBAL 构建的微 ORM,专为在 Silex 微框架和 Symfony Flex 应用程序中使用而量身定制。

安装

在您的 composer.json 中,将以下内容添加到要求列表中:

"troisyaourts/alpha": "dev-master"

然后

composer update

在您的典型 "app.php" 中添加以下行:

$app->register(new Provider\DoctrineServiceProvider(), array('db.options' => $config['db.options']));
$app->register(new Alpha\ServiceProvider());

这将使 Alpha 管理器在您的控制器中的 "models" 下可用。Alpha 管理器使用主 $app['db'] 对象。

在 "examples" 目录中提供了使用示例。

要运行一些测试,克隆当前版本并执行:

curl -s http://getcomposer.org/installer | php
php composer.phar install
php examples/test.php

使用方法

类文件

在 "Model" 中创建一个名为 "MyObject.php" 的文件

<?php
  namespace Model;
  use Alpha\Entity;
  use Alpha\Manager;

  class MyObject extends Entity
  {
    const TABLE_NAME = 'myobject';
    const PRIMARY = 'prim_id'; //optionnal, default is juste "id"

    public function getHelloFoo(){
      return "Hello ".$this->foo;
    }

    public static function getAllBarred(Manager $manager){
      $q = $manager->query()
                         ->where('bar = :bar')
                         ->setParameter("bar", 1);
      return $manager->fetchAll($q);
    }
    
  }
?>

获取新对象

<?php 
  $myobj = $app['models']('MyObject')->get();
?>

通过主键_id 获取对象

<?php 
  $myobj = $app['models']('MyObject')->get(12345);
?>

使用定义的静态函数获取对象列表

<?php 
  $myobj_iterator = $app['models']('MyObject')->getAllBarred();
  foreach($myobj_iterator as $prim_id => $obj)
    echo $obj->getHelloFoo();
?>

并将新对象追加到列表中

<?php 
  $lastItem = $app['models']('MyObject')->get(21);
  $myobj_iterator->append($lastItem);
  echo $myobj_iterator->end()->getHelloFoo();
?>

保存对象

<?php 
  $myobj = $app['models']('MyObject')->get();
  $myobj->bar = 1;
  $myobj->save();  //obj didn't exist : INSERT
  echo $myobj->id; //you can access to last_insert_id

  $myobj->foo = "Toto";
  $myobj->save(); //obj existed : UPDATE
?>

历史

该项目始于 2001 年,当时 Matthieu Duclos 决定为一个基于电子邮件的角色扮演游戏 Ys 开发一个网络应用程序。他编写了一些文件,包括后来成为 alpha 类的文件,并将结果称为 aobjet。

后来,他与其他人一起加入,与 Nicolas B. 和 Julien Z. 一起继续开发他的工作。制作了一个新版本,称为 alpha,因为它是我们构建的任何其他网络应用程序的第一块砖。

随着项目的演变,这个版本专门针对在 Silex 微框架中使用的性能进行了优化。