uzulla / cfedb2

eccentric and risky, outdated ORM for PHP.

v0.2.3 2016-06-29 16:14 UTC

This package is auto-updated.

Last update: 2024-09-07 14:57:41 UTC


README

オレオレO/Rマッパー

需求

  • PDO
  • mysql 或 sqlite3
  • PHP >= 5.3.x

这是一个纯库

没有像链式构建SQL或者强大的Join这样的功能。设计自由度也有限。以前使用ActiveRecord时,觉得快速创建模型很方便,就按照当时的理解(没有理解范式变迁)来编写了。但是,由于AR的find()、join()等操作很繁琐,所以不想用SQL,所以没有制作SQLBuilder系。

  • 我更倾向于首先编写SQL
  • 输出的是哈希值,有点不方便
  • 在将对象插入数据库之前,我想创建一个对象
  • 不管怎样,Row对象最好

如果你是这样的人,那么这个库可能也适合你。

概要

$post = new Post();
$post->val('text', 'this is text');
$post->val('num', 123);
$post->saveItem();

$post2 = Post::getById(1);
echo $post2->val('text');

$post3 = Post::getBySome('text', 'this is text');
if(empty($post3)){
    echo "not found";
}

$post_list = Post::getsBySQL('SELECT * FROM post WHERE id>:id', array('id'=>5));
if(empty($post_list)){
    echo "not found";
}
foreach($post_list as $p){
    echo $p->val('id');
}

$post->deleteItem();

//もし貴方がROWオブジェクト嫌いなら…

$post_list = Post::getsHashBySome('text', 'this is text');

请参阅测试代码(但并非全部列出)

安装

下载后随意放置,或者使用Composer

{
	"require": {
		"uzulla/cfedb2": "*"
	}
}

模型类示例

<?php
require_once('../lib/Uzulla/CFEDb2.php'); // ComposerのAutoloaderをつかっているなら不要

class Post extends \Uzulla\CFEDb2{
    static $tablename = 'post';
    static $pkeyname = 'id';
    public function __construct() {
        $this->values['id'] = null;
        $this->values['text'] = null;
        $this->values['num'] = null;
        $this->values['created_at'] = null;
        $this->values['updated_at'] = null;
    }
    public function as_you_like(){
        return $this->val('id').' as you like!';
    }
    static function getMySpecial(){
        return static::getById(3);
    }
}

DB连接信息设置

\Uzulla\CFEDb2::$config = array(
    'type'=> 'mysql',
    // 'type'=> 'sqlite',
    'dsn' => 'host=127.0.0.1;dbname=test;charset=utf8mb4',
    // 'dsn' => 'unix_socket=/tmp/mysql.sock;dbname=test',
    // 'dsn' => __DIR__.'/sqlite.db',
    'user' => "",
    'pass' => "",
    'pre_exec' => false,
    'reuse_pdo' => true,
    'DEBUG_BACKTRACE' => true, // or false, enable backtrace log.
    'log'=> null // null will use error_log, Psr-3 logger instance(ex:monolog)
);