lloydzhou / activerecord
此包已被弃用,不再维护。作者建议使用 bephp/activerecord 包代替。
PHP的micro activerecord库(只有400行代码,包括注释),支持链式调用和关系(HAS_ONE, HAS_MANY, BELONGS_TO)。
v2.1.0
2016-08-25 09:33 UTC
Requires
- php: >=5.3.0
Requires (Dev)
This package is not auto-updated.
Last update: 2019-02-20 18:42:17 UTC
README
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
示例
包含基础类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);