受Django启发的PHP最小ORM

v1.1 2017-01-13 16:34 UTC

This package is not auto-updated.

Last update: 2024-09-26 20:25:37 UTC


README

受Django启发的PHP最小ORM。

这是什么?

这是一个基于Django ORM API的PHP小型、易于使用的ORM。

要求

PHP 5.4和由composer安装的依赖项(composerAdoDBTwig模板系统)。

安装

lulo已上传到packagist.org,可以使用composer轻松安装。

composer require intelligenia/lulo

文档

本地配置

在你的web服务器中创建一个名为configuration.local.php的文件,其结构应与configuration.local.example.php中定义的结构相同。

此文件必须包含如示例中所示的数据库访问凭据。

function get_db_settings(){
    $db_settings = [
        "server" => "<DB SERVER>",
        "user" => "<DB USER>",
        "password" => "<DB PASSWORD>",
        "database" => "<DATABASE>"
    ];
    return $db_settings;
}

此本地配置文件将从configuration.php自动加载,并用于访问数据库。

API

扩展文档

示例

有一个测试模块,提供了Lulo及其查询系统的一些使用示例。

/**
 * Example user class for a social-network-like system.
 * @author Diego J. Romero López at intelligenia.
 * */
class User extends \lulo\models\LuloModel{
	
	/** Model table */
	const TABLE_NAME = "user";
	
	/** Class name*/
	const CLASS_NAME = __CLASS__;
	
	/**
	 * Metainformation of the class
	 * */
	public static $META = [
		// Description of the model
		"model_description" => "Test user",
		// Verbose name
		"verbose_name" => "test user",
		// Verbose name (plural)
		"verbose_name_plural" => "test users",
		// Gender of the verbose name
		"gender" => "m",
		// Order in lists (["field1"=>"ASC|DESC", "field2"=>"ASC|DESC", ...])
		"order" => ["username"=>"ASC"]
	];
	
	/**
	 * Model attributes
	 * */
	protected static $ATTRIBUTES = [
		// Primary key
		"stack"=>["type"=>"string", "default"=>TEST_STACK, "verbose_name"=>"User dependant stack", "auto"=>true],
		"id" => ["type"=>"int", "verbose_name"=>"Identificador único del usuario", "auto"=>true],
		
        	// Proper user fields
		"first_name" => ["type"=>"string", "verbose_name"=>"Name", "access"=>"rw"],
		"last_name" => ["type"=>"string", "verbose_name"=>"Family name"],
		"email" => ["type"=>"string", "subtype"=>"email", "verbose_name"=>"E-Mail"],
		"phone" => ["type"=>"string", "subtype"=>"phone", "verbose_name"=>"User telepohone number", "null"=>true, "default"=>null],
		"username" => ["type"=>"string", "subtype"=>"username", "verbose_name"=>"Username"],
		"sha1_password" => ["type"=>"string", "verbose_name"=>"Password"],
		
        	// Photograph of the user. Stored as a blob in database
		"main_photo" => ["type"=>"blob", "verbose_name"=>"User photo", "null"=>true, "default"=>null],
		"main_photo_mimetype" => ["type"=>"string", "verbose_name"=>"Mimetype of main_photo", "default" =>"application/octet-stream"],
		"main_photo_filename" => ["type"=>"string", "verbose_name"=>"Filename of main_photo", "null"=>true, "default"=>null],
		
        	// Datetime fields
		"last_update_datetime" => ["type"=>"string", "subtype"=>"datetime", "verbose_name"=>"Last update of this object", "auto"=>true],
		"creation_datetime" => ["type"=>"string", "subtype"=>"datetime", "verbose_name"=>"Creation datetime of this object", "auto"=>true],
	];
	
	
	/** Primary key */
	protected static $PK_ATTRIBUTES = ["stack", "id"];
	
	
	/**
	 * Related models.
	 * */
	protected static $RELATED_MODELS = ["Tag", "Photo", "Post"];
	
	
	/** Relationships */
	protected static $RELATIONSHIPS = [
	
	];
}
User::init();

扩展Lulo

添加新的DBMS SQL模板

在sql_templates中添加一个新的文件夹,文件夹名称将标识你的DBMS(例如mssql2012)。

覆盖所需的查询。Lulo模板系统将首先加载你在此处指定的模板,如果找不到模板,它将尝试从_default文件夹加载。

待办事项

  • 允许模型动态更改表。可以通过重新实现getTableName方法来完成。
  • 代码翻译结束。
  • 将文档翻译成英文。
  • 重新实现Collection以使用RecordSet。
  • 从模型创建表的脚本。管理命名空间中的Manager类允许创建和删除模型表。
  • 迁移。

许可

MIT许可.

作者

  • Lulo和Lulo查询由本项目的负责人和主要开发者Diego J. Romero López在intelligenia创建(diegoREMOVETHIS@REMOVETHISintelligenia.com
  • 数据库抽象层由intelligenia团队的多位成员创建。由Gerardo Fernandez Rodríguez审查和扩展。
  • QueryResult由Gerardo Fernandez Rodríguez完成。
  • MSSQL的几个错误修复和测试由Francisco Morales完成。
  • Brian Holsters完成的少量翻译修正。