lloydzhou/activerecord

此包已被弃用,不再维护。作者建议使用 bephp/activerecord 包代替。

PHP的micro activerecord库(只有400行代码,包括注释),支持链式调用和关系(HAS_ONE, HAS_MANY, BELONGS_TO)。

v2.1.0 2016-08-25 09:33 UTC

README

Build Status Coverage Status Latest Stable Version Total Downloads Latest Unstable Version License

PHP的micro activerecord库(只有400行代码,包括注释),支持链式调用和关系(HAS_ONE, HAS_MANY, BELONGS_TO)。

中文版.

文档

文档

API参考

CRUD函数

setDb(\PDO $db)

设置数据库连接。

ActiveRecord::setDb(new PDO('sqlite:test.db'));

insert() : boolean|\ActiveRecord

构建插入SQL语句,并将当前记录插入到数据库中。如果插入成功则返回当前对象,否则返回false。

$user = new User();
$user->name = 'demo';
$user->password = md5('demo');
$user->insert();

find(integer $id = null) : boolean|\ActiveRecord

查找一条记录并将其赋值给当前对象。如果使用$id参数调用此函数,将根据此id查找记录。如果没有设置,则只查找数据库中的第一条记录。如果找到记录,将其赋值给当前对象并返回它,否则返回"false"。

$user->notnull('id')->orderby('id desc')->find();

findAll() : array

查找数据库中的所有记录。返回ActiveRecord数组。

$user->findAll();

update() : boolean|\ActiveRecord

构建更新SQL语句,并在数据库中更新当前记录,仅将脏数据写入数据库。如果更新成功则返回当前对象,否则返回false。

$user->notnull('id')->orderby('id desc')->find();
$user->email = 'test@example.com';
$user->update();

delete() : boolean

删除数据库中的当前记录。

reset() : \ActiveRecord

重置$params和$sqlExpressions。返回$this,可以使用链式方法调用。

dirty(array $dirty = array()) : \ActiveRecord

设置或重置脏数据。脏数据将被设置,或空数组以重置脏数据。

SQL部分函数

select()

设置要选择的列。

$user->select('id', 'name')->find();

from()

设置要查找记录的表。

$user->select('id', 'name')->from('user')->find();

join()

设置要查找记录的表。

$user->join('contact', 'contact.user_id = user.id')->find();

where()

设置条件。

$user->where('id=1 AND name="demo"')->find();

group()/groupby()

$user->select('count(1) as count')->groupby('name')->findAll();

order()/orderby()

$user->orderby('name DESC')->find();

limit()

$user->orderby('name DESC')->limit(0, 1)->find();

WHERE条件

equal()/eq()

$user->eq('id', 1)->find();

notequal()/ne()

$user->ne('id', 1)->find();

greaterthan()/gt()

$user->gt('id', 1)->find();

lessthan()/lt()

$user->lt('id', 1)->find();

greaterthanorequal()/ge()/gte()

$user->ge('id', 1)->find();

lessthanorequal()/le()/lte()

$user->le('id', 1)->find();

like()

$user->like('name', 'de')->find();

in()

$user->in('id', [1, 2])->find();

notin()

$user->notin('id', [1,3])->find();

isnull()

$user->isnull('id')->find();

isnotnull()/notnull()

$user->isnotnull('id')->find();

安装

composer require bephp/activerecord 

有一个博客示例,与路由器MicoTpl一起工作。

示例

包含基础类ActiveRecord

include "ActiveRecord.php";

定义类

class User extends ActiveRecord{
	public $table = 'user';
	public $primaryKey = 'id';
	public $relations = array(
		'contacts' => array(self::HAS_MANY, 'Contact', 'user_id'),
		'contact' => array(self::HAS_ONE, 'Contact', 'user_id'),
	);
}
class Contact extends ActiveRecord{
	public $table = 'contact';
	public $primaryKey = 'id';
	public $relations = array(
		'user' => array(self::BELONGS_TO, 'User', 'user_id'),
		'user_with_backref' => array(self::BELONGS_TO, 'User', 'user_id', array(), 'contact'),
        // using 5th param to define backref
	);
}

初始化数据

ActiveRecord::setDb(new PDO('sqlite:test.db'));
ActiveRecord::execute("CREATE TABLE IF NOT EXISTS user (
                                id INTEGER PRIMARY KEY, 
                                name TEXT, 
                                password TEXT 
                        );");
ActiveRecord::execute("CREATE TABLE IF NOT EXISTS contact (
                                id INTEGER PRIMARY KEY, 
                                user_id INTEGER, 
                                email TEXT,
                                address TEXT
                        );");

将一个用户插入数据库。

$user = new User();
$user->name = 'demo';
$user->password = md5('demo');
var_dump($user->insert());

插入一个属于当前用户的联系人。

$contact = new Contact();
$contact->address = 'test';
$contact->email = 'test1234456@domain.com';
$contact->user_id = $user->id;
var_dump($contact->insert());

关系使用示例

$user = new User();
// find one user
var_dump($user->notnull('id')->orderby('id desc')->find());
echo "\nContact of User # {$user->id}\n";
// get contacts by using relation:
//   'contacts' => array(self::HAS_MANY, 'Contact', 'user_id'),
var_dump($user->contacts);

$contact = new Contact();
// find one contact
var_dump($contact->find());
// get user by using relation:
//    'user' => array(self::BELONGS_TO, 'User', 'user_id'),
var_dump($contact->user);