friedolinfoerder/wp-activerecord

WordPress 的 ActiveRecord 实现

v1.0.6 2021-01-02 14:25 UTC

This package is auto-updated.

Last update: 2024-09-16 14:59:20 UTC


README

WordPress ActiveRecord 实现了 Active Record 模式,以便轻松检索、更新和删除数据库表的行,而无需与原始 SQL 查询字符串纠缠。该库的目标是为 CMS WordPress 提供一个小巧但功能强大的 ORM,易于实现。因此,它仅包含两个类:ActiveRecordQuery

  • 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

静态属性

属性 $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许可证授权。