brandonwamboldt / wp-orm
WordPress ORM
Requires
- php: >=5.3
This package is not auto-updated.
Last update: 2024-09-17 06:35:26 UTC
README
WordPress ORM 是一个小的库,它将基本的 ORM 添加到 WordPress 中,易于扩展,包括文章、页面、评论和用户等核心 WordPress 模型。它旨在允许你轻松地添加新的模型,除了自定义文章类型,而且不需要编写大量的手动 SQL。
安装
虽然你可以像普通插件一样安装和激活它,但我建议将其放在 /wp-content/mu-plugins
文件夹中,并添加一个名为 wp-orm.php
的脚本以加载主要插件文件(只有从 mu-plugins
加载顶级 .php
文件)。
wp-orm.php
:
<?php require 'wp-orm/wp-orm.php';
示例
获取5篇已发布的文章,按文章标题排序。
use WordPress\ORM\Model\Page; $pages = Page::query() ->limit(5) ->where('post_status', 'publish') ->sort_by('post_title') ->order('ASC') ->find();
通过登录名查找用户
use WordPress\ORM\Model\User; $user = User::find_one_by('user_login', 'brandon'); echo $user->get_user_login(); print_r($user->to_array());
更复杂查询的示例
use WordPress\ORM\Model\Post; $posts = Post::query() ->limit(15) ->offset(0) ->where_all(['post_status' => 'publish', 'post_type' => 'post']) ->where_like('post_title', '%Hello world%') ->sort_by('post_title') ->order('ASC') ->find();
更新模型
use WordPress\ORM\Model\Post; $post = Post::find_one(1204); $post->set_post_title('What an amazing post!'); $post->save();
元数据
用户、文章、页面和评论都支持元数据。
$post = Post::find_one(1337); $post->get_metadata('_edit_lock'); $post->update_metadata('_edit_lock', ''); $post->delete_metadata('_edit_lock');
元数据会立即使用 WordPress 元数据函数在内部保存。调用 save()
不需要。
自定义模型
<?php namespace WordPress\ORM; class Venue extends BaseModel { protected $id; protected $venue_title; protected $description; protected $now_playing; protected $location; protected $avg_rating; public static function get_primary_key() { return 'id'; } public static function get_table() { return 'wp_venues'; } public static function get_searchable_fields() { return ['venue_title', 'description', 'now_playing']; } }
你现在可以使用这个场所,将其持久化,并使用上面显示的定制查询 DSL 查询它。
模型方法
Model::get_table()
这是一个必须在你的模型中定义的静态方法,应该返回持久化数据到的表。
Model::get_searchable_fields()
这是一个必须在你的模型中定义的静态方法,应该返回一个数组,表示在执行搜索查询时搜索的属性。
Model::get_primary_key()
返回用作主键的属性。默认为 id
。
Model::create(array $properties)
从一个属性数组创建一个新的模型。
Model::find_one_by(string $property, mixed $value)
查找具有指定属性值的单个模型。
Model::find_one(integer $id)
查找主键等于给定 ID 的单个模型。
Model::query()
返回一个新的 WordPress\ORM\Query
对象。
Model::all()
返回数据库中的每个模型。
$model->primary_key()
返回模型的主键(值,而不是属性名称)。
$model->to_array()
返回模型的所有属性作为数组。
$model->flatten_props(array $props)
在调用 save()
之前调用,应该将属性中的任何对象扁平化为字符串,以便它们可以被持久化。默认将 DateTime
对象扁平化为时间戳,将数组扁平化为序列化数组。
$model->save()
将你的模型保存到数据库中。如果模型没有 ID,则创建新行,如果存在 ID,则更新现有行。
$model->delete()
从数据库中删除模型。如果成功返回 true
,如果失败返回 false
。
ORM 查询
以下是在调用 Model::query()
函数后可以访问的函数。
$query->limit(integer $limit)
使用 SQL LIMIT
子句限制返回的结果数量。
$query->offset(integer $offset)
偏移返回的结果,用于分页。使用 SQL OFFSET
子句。
$query->sort_by(string $property)
按指定的属性排序结果。也可以是 MySQL 函数,如 RAND()
。
$query->order(string $order)
按照给定的顺序排列结果。可以是 ASC
或 DESC
之一。
$query->search(string $search_term)
将结果限制为匹配给定搜索词的项目。搜索 Model::get_searchable_fields
返回的属性。
$query->where(string $property, string $value)
向 where 子句添加参数。等同于 WHERE $property = '$value'
。$value
将自动转义。
$query->where_not(string $property, string $value)
向 where 子句添加参数。等同于 WHERE $property != '$value'
。$value
将自动转义。
$query->where_like(string $property, string $value)
向 where 子句添加参数。等同于 WHERE $property LIKE '$value'
。$value
将自动转义。
$query->where_not_like(string $property, string $value)
向 where 子句添加参数。等同于 WHERE $property NOT LIKE '$value'
。$value
将自动转义。
$query->where_lt(string $property, string $value)
向 where 子句添加参数。等同于 WHERE $property < '$value'
。$value
将自动转义。
$query->where_lte(string $property, string $value)
向 where 子句添加参数。等同于 WHERE $property <= '$value'
。$value
将自动转义。
$query->where_gt(string $property, string $value)
向 where 子句添加参数。等同于 WHERE $property > '$value'
。$value
将自动转义。
$query->where_gte(string $property, string $value)
向 where 子句添加参数。等同于 WHERE $property >= '$value'
。$value
将自动转义。
$query->where_in(string $column, array $in)
将结果限制为给定列的值之一的项目。等同于 WHERE $property IN ('value1', 'value2')
,其中 value1
和 value2
是数组中的值。
$query->where_not_in(string $column, array $in)
将结果限制为给定列不是给定值之一的项目。等同于 WHERE $property NOT IN ('value1', 'value2')
,其中 value1
和 value2
是数组中的值。
$query->where_any(array $where)
将结果限制为匹配数组中给出的任何属性/值对的项目。必须至少匹配一个。
$query->where_all(array $where)
将结果限制为匹配数组中给出的所有属性/值对的项目。
操作 & 过滤
wporm_query($sql, $model_class)
操作由 Query 类创建的原始 SQL 查询。
add_filter('wporm_query', function($sql, $model_class) { if ($model_class == 'WordPress\ORM\Model\Page') { $sql = str_replace('wp_posts', 'wp2_posts', $sql); } return $sql; }, 10, 2);
wporm_count_query($sql, $model_class)
操作由 Query 类创建的原始 SQL 查询(行数变体)。
add_filter('wporm_count_query', function($sql, $model_class) { if ($model_class == 'WordPress\ORM\Model\Page') { $sql = str_replace('wp_posts', 'wp2_posts', $sql); } return $sql; }, 10, 2);
许可证
此代码受 MIT 许可证许可。