friedolinfoerder / wp-activerecord
WordPress 的 ActiveRecord 实现
Requires
- php: >=5.5.0
Requires (Dev)
- phpunit/phpunit: ^4.0
README
WordPress ActiveRecord 实现了 Active Record 模式,以便轻松检索、更新和删除数据库表的行,而无需与原始 SQL 查询字符串纠缠。该库的目标是为 CMS WordPress 提供一个小巧但功能强大的 ORM,易于实现。因此,它仅包含两个类:ActiveRecord
和 Query
ActiveRecord
类将行映射到对象实例,将列映射到对象属性。Query
类提供了创建 SQL 查询的 流畅接口。
安装
composer require friedolinfoerder/wp-activerecord
用法
您可以在您的插件或直接在您的 functions.php
文件中使用此库。您只需包含 ActiveRecord
类并定义您的模型类(例如 Slideshow
)
// create a model class for the table {wp-prefix}slideshows class Slideshow extends \wp_activerecord\ActiveRecord { protected static $table_name = 'slideshows'; }
有了这个,您可以创建新的行,更新并保存它们,如下所示
// create new row $slideshow = Slideshow::create([ 'title' => 'Header slideshow', 'slide_time' => 3000, 'slide_effect' => 'fade' ]); // retrieve by id... $slideshow = Slideshow::get(1); // ... and update the row $slideshow->title = 'New title'; $slideshow->slide_effect = 'slide'; $slideshow->save();
API
- 类
ActiveRecord
- 类
Query
- 静态方法
- 实例方法
- 方法
select([$...])
- 方法
delete()
- 方法
update([$column [, $value]])
- 方法
set($column [, $value])
- 方法
insert($data)
- 方法
where($column [, $type_or_value [, $value]])
- 方法
and_where($column [, $type_or_value [, $value]])
- 方法
or_where($column [, $type_or_value [, $value]])
- 方法
group_by($column [, $order])
- 方法
having($column [, $type_or_value [, $value]])
- 方法
and_having($column [, $type_or_value [, $value]])
- 方法
or_having($column [, $type_or_value [, $value]])
- 方法
order_by($column [, $order])
- 方法
limit($limit)
- 方法
offset($offset)
- 方法
join($table, $attribute, $foreign_attribute [, $type])
- 方法
sql()
- 方法
get_results()
- 方法
get_row()
- 方法
get_col()
- 方法
get_var()
- 方法
get()
- 方法
get_one()
- 方法
execute()
- 方法
类 ActiveRecord
静态属性
属性 $casts
将行值转换为原生类型。
示例
class Slideshow extends \wp_activerecord\ActiveRecord { protected static $casts = [ 'num_slides' => 'int', 'duration' => 'float', 'active' => 'boolean', 'created_at' => 'datetime', ]; }
静态方法
方法 create([$attributes])
使用属性数组创建模型
示例
$activeRecord = Table::create(); // or $activeRecord = Table::create([ 'name' => 'wp-activerecord', 'title' => 'WordPress ActiveRecord' ]);
方法 delete_by_id($id)
根据 ID 删除行
示例
Table::delete_by_id(3);
方法 get([$id])
获取所有模型实例或根据 ID 获取模型实例
示例
$activeRecords = Table::get(); // all records $activeRecord = Table::get(3); // one record by id
方法 get_{type}_by_{column}($value [, $...])
动态查找方法:获取变量、行、结果或模型实例
示例
$activeRecord = Table::get_one_by_title('WordPress'); $array = Table::get_by_name_or_title('wp-activerecord', 'WP'); $row = Table::get_row_by_name_and_title('wp', 'WP'); $var = Table::get_var_name_by_id(3);
方法 get_table_name()
获取表名
示例
$table_name = Table::get_table_name();
方法 insert($data)
将一行或多行插入到数据库中
示例
$last_insert_id = Table::insert([ 'name' => 'wp-activerecord', 'title' => 'WordPress ActiveRecord' ]); // or $last_insert_id = Table::insert([[ 'name' => 'ActiveRecord', 'title' => 'Class ActiveRecord' ], [ 'name' => 'Query', 'title' => 'Class Query' ]]);
方法 query()
获取查询实例
示例
$query = Table::query();
方法 update($column [, $value])
创建查询实例并在其上调用更新操作的快捷方法
示例
$query = Table::update('name', 'wp-activerecord-updated'); // or $query = Table::update([ 'name' => 'wp-activerecord-updated', 'title' => 'Updated WordPress ActiveRecord' ]);
方法 wpdb()
获取 wpdb 实例
示例
$wpdb = Table::wpdb(); // use case: $userInput = '20%'; Table::query() ->delete() ->where('name', 'like', '%' . Table::wpdb()->esc_like($userInput) . '%') ->execute();
实例方法
方法 delete()
删除模型
示例
$activeRecord->delete();
方法 save()
保存模型
示例
$activeRecord->save();
事件方法
方法 save_pre($isNew)
在保存模型之前调用
示例
// in your derived class: protected function save_pre($isNew) { $this->new = $isNew ? 1 : 0; }
方法 save_post($isNew)
在保存模型后调用
示例
// in your derived class: protected function save_post($isNew) { // do something with $this }
方法 delete_pre()
在删除模型之前调用
示例
// in your derived class: protected function delete_pre() { // do something with $this }
方法 delete_post()
在删除模型之后调用
示例
// in your derived class: protected function delete_post() { // do something with $this }
类 Query
静态方法
方法 wpdb()
获取 wpdb 实例
示例
$wpdb = Query::wpdb();
实例方法
选择行
方法 select([$...])
示例
$activeRecord = Table::query() ->select('id', 'name') ->get();
方法 delete()
删除行
示例
Table::query() ->delete() ->where('name', 'wp') ->execute();
方法 update([$column [, $value]])
更新行(\wp_activerecord\Query::set的别名)
示例
Table::query() ->update() ->set('name', 'wp') ->execute(); // or Table::query() ->update('name', 'wp') ->execute(); // or Table::query() ->update([ 'name' => 'wp', 'title' => 'WordPress' ]) ->execute();
方法 set($column [, $value])
设置需要更新的列
示例
Table::query() ->set('name', 'wp') ->execute(); // or Table::query() ->set([ 'name' => 'wp', 'title' => 'WordPress' ]) ->execute();
方法 insert($data)
插入行
示例
Table::query() ->insert([ 'name' => 'wp', 'title' => 'WordPress' ]) ->execute(); // or Table::query ->insert([[ 'name' => 'ActiveRecord', 'title' => 'Class ActiveRecord' ], [ 'name' => 'Query', 'title' => 'Class Query' ]]) ->execute();
方法 where($column [, $type_or_value [, $value]])
添加where条件
示例
$activeRecords = Table::query() ->where('name', 'wp') ->where('title', 'LIKE', '%active%') ->where([ 'start' => 12, 'end' => 37 ]) ->where(['deleted_at', null]) // query for NULL value, produces `deleted_at` IS NULL ->where('value', '>', ['RAND()']) // raw value wrapped in array ->where('numbers', 'in', [[1, 2, 3]] // a array as raw value will be joined ->get();
方法 and_where($column [, $type_or_value [, $value]])
where的别名。
方法 or_where($column [, $type_or_value [, $value]])
where的别名,但为where子句添加一个新分组,将使用OR关键字添加
方法 group_by($column [, $order])
添加group by部分
示例
$activeRecords = Table::query() ->group_by('name', 'asc') ->get();
方法 having($column [, $type_or_value [, $value]])
添加having条件
示例
$activeRecords = Table::query() ->group_by('name') ->having(["SUM(price)"], ">", 10) // raw column value wrapped in array ->get();
方法 and_having($column [, $type_or_value [, $value]])
having的别名。
方法 or_having($column [, $type_or_value [, $value]])
having的别名,但为having子句添加一个新分组,将使用OR关键字添加
方法 order_by($column [, $order])
添加order by部分
示例
$activeRecords = Table::query() ->order_by('description') ->order_by('name', 'desc') ->get();
方法 limit($limit)
添加limit
示例
$activeRecords = Table::query() ->limit(5) ->get();
方法 offset($offset)
添加offset
示例
$activeRecords = Table::query() ->offset(10) ->get();
方法 join($table, $attribute, $foreign_attribute [, $type])
添加join条件
示例
$activeRecords = Table::query() ->join('OtherTable', 'id', 'table_id') ->get();
方法 sql()
创建最终的SQL语句
示例
$sql = Table::query() ->select('description') ->where('description', 'like', 'Title: %') ->sql();
方法 get_results()
获取查询结果
示例
$results = Table::query() ->get_results();
方法 get_row()
获取查询的行
示例
$row = Table::query() ->where('name', 'this is a unique name') ->get_row();
方法 get_col()
获取查询的列
示例
$descriptions = Table::query() ->select('description') ->get_col();
方法 get_var()
获取查询的值
示例
$description = Table::query() ->select('description') ->where('name', 'this is a unique name') ->get_var();
方法 get()
将查询结果作为模型实例数组获取
示例
$activeRecords = Table::query() ->get();
方法 get_one()
将查询结果作为模型实例获取
示例
$activeRecord = Table::query() ->where('name', 'this is a unique name') ->get_one();
方法 execute()
执行查询
示例
Table::query() ->delete() ->where('name', 'this is a unique name') ->execute();
许可证
此代码根据MIT许可证授权。