Eloquent 是 Laravel 的 ORM 组件,可以帮助我们非常方便的管理 WordPress Database,存取数据到数据表中,Eloquent 是 Laravel 是一个松耦合的实现,也就是说,我们可以把 Eloquent 用到第三方系统中,今天就为大家介绍一个可以帮助我们在 WordPress 使用 Eloquent 的 PHP 包。
首先,通过 Composer 安装 Eloquent ORM 包
编辑你主题的 composer.json 文件,加入以下内容。
{
"require": {
"tareq1988/wp-eloquent": "dev-master"
}
}
然后运行:
$ composer install
如果你已经使用 Composer 来管理你的主题了,直接以下代码:
$ composer require tareq1988/wp-eloquent
usage example
引入 wp-eloquent 包
在需要使用 Eloquent 的文件或者WordPress主题的functions.php 文件中直接引入 Composer 生成的自动加载文件即可在 WordPress 中使用 Eloquent 包。
require_once( dirname( __FILE__ ) . '/../vendor/autoload.php' );
基本使用方法
$db = \WeDevs\ORM\Eloquent\Database::instance();
var_dump( $db->table('users')->find(1) );
var_dump( $db->select('SELECT * FROM wp_users WHERE id = ?', [1]) );
var_dump( $db->table('users')->where('user_login', 'john')->first() );
获取一个数据表中的所有行
$users = $db->table('users')->get();
foreach ($users as $user) {
var_dump($user->display_name);
}
注意,users
就是 WordPress 数据库的中 wp_users
数据表,在这里使用的时候,不用加 wp 前缀,wp-eloquent 会自动为我们添加。
新建一个模型
use \WeDevs\ORM\Eloquent\Model as Model;
class Employee extends Model {
}
var_dump( Employee::all()->toArray() ); // 获取所有雇员
var_dump( Employee::find(1) ); // 获取 ID 为1 的雇员
类型 Employee 将被翻译未 PREFIX_employees 数据表然后运行查询,同时,如有需要,我们也可以修改数据表名称。
内置的 WordPress 模型
- Post
- Comment
- Post Meta
- User
- User Meta
use WeDevs\ORM\WP\Post as Post;
var_dump( Post::all() ); // 只返回文章类型为 "post" 的文章
根据文章状态和文章类型过滤查询
use WeDevs\ORM\WP\Post as Post;
var_dump(Post::type('page')->get()->toArray()); // 获取页面
var_dump(Post::status('publish')->get()->toArray()); // 获取已发布的文章
var_dump(Post::type('page')->status('publish')->get()->toArray()); // 获取已发布的页面
工作原理
- Eloquent 在这里主要作为一个查询构建器使用
- Eloquent 使用 WPDB 进行数据库查询
- 因此,我们可以使用 debug-bar 或 query-monitor 来获取 SQL 查询报价
- WP Eloquent 不会增加额外的数据库链接和查询
最小需求
- PHP 5.3.0
- WordPress 3.6+
2 thoughts on “帮助我们在 WordPress 使用 Eloquent ORM 的插件 wp-eloquent”
太棒了!RoR 有 ActiveRecord,Laravel 有 Eloquent ORM,一直在想 WordPress 那个难用的 wpdb 什么时候才能替换掉……感谢刀哥!
=w=顺便转载了很多好文章:https://wplog.org/topics/16
应该感谢 wp-eloquent 的作者才对。