一个微型的ActiveRecord库(包含注释才400行),支持链式调用以及(HAS_ONE, HAS_MANY, BELONGS_TO)三种关联关系
设置数据库连接
ActiveRecord::setDb(new PDO('sqlite:test.db'));
插入函数,会使用当前对象的值生成插入SQL语句,如果插入成功,返回当前对象,否则返回false
$user = new User();
$user->name = 'demo';
$user->password = md5('demo');
$user->insert();
从数据库查找记录,并将记录赋值给当前对象 如果使用$id参数,则使用这个id来进行查找 如果查找到记录,则赋值给当前对象,否则返回false
$user->notnull('id')->orderby('id desc')->find();
查找一个列表数据,返回的数组里面,每一个都是一个ActiveRecord对象
$user->findAll();
更新当前对象对应的数据库记录,每次更新的时候,只会将改变的值更新到数据库。 更新成功返回当前对象,否则返回false
$user->notnull('id')->orderby('id desc')->find();
$user->email = '[email protected]';
$user->update();
删除当前对象在数据库中对应的记录
将$params, $sqlExpressions数组重置
这个函数用来设置或者重置dirty数据
设置需要查找的字段
$user->select('id', 'name')->find();
设置查找的表
$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();
$user->select('count(1) as count')->groupby('name')->findAll();
$user->orderby('name DESC')->find();
$user->orderby('name DESC')->limit(0, 1)->find();
$user->eq('id', 1)->find();
$user->ne('id', 1)->find();
$user->gt('id', 1)->find();
$user->lt('id', 1)->find();
$user->ge('id', 1)->find();
$user->le('id', 1)->find();
$user->like('name', 'de')->find();
$user->in('id', [1, 2])->find();
$user->notin('id', [1,3])->find();
$user->isnull('id')->find();
$user->isnotnull('id')->find();
composer require bephp/activerecord
这里有一个博客的例子, 与Router以及MicoTpl一起组织起来使用。
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', null, 'contact'),
// 使用第五个参数定义一个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 = '[email protected]';
$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);