在 WordPress 中使用 RedBean PHP ORM 框架操作数据库

文 / @WordPress主题

使用RedBeanPHP操作WordPress数据库

我是一位WordPress开发者,经常需要通过代码操作WordPress数据库。在WordPress中,直接通过$wpdb操作数据库是非常麻烦的,以至于很多新手看到这个时很容易就望而却步了。而在PHP的世界中,有一个特立独行的ORM框架:RedBeanPHP,该ORM的特点就是身材苗条,功能强大,同时又非常简单易用,使用RedBeanPHP操作数据库的时候,我们甚至不用事先创建数据库结构,直接保存数据就可以了,RedBeanPHP会根据我们需要保存的数据类型,自动帮我们创建好数据库结构。下面我们来看一下RedBeanPHP的具体使用方法。

加载rb.php,建立数据库连接

为什么说RedBeanPHP的身材苗条呢,该框架只有一个rb.php文件,使用的时候,我们直接在PHP代码中包含这个文件,配置一下数据库连接就可以使用了。在WordPress中,连接数据需要的信息是以常亮的形式在wp-config.php文件中保存的,我们直接使用这些信息,新建数据库连接就可以了。

//加载RedBeanPHPORM
require_once(dirname(__FILE__).'/rb.php');
//配置数据库连接
R::setup('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD);
R::setAutoResolve(TRUE);

在主题的functions.php中加入以上代码,WordPress主初始化的时候,供RedBeanPHP使用的数据库连接就自动建立好了,一旦建立了数据库连接,我们就可以使用RedBeanPHP很方便的操作数据库了。

添加WordPress数据表前缀

默认情况下,RedBeanPHP用下划线来表示数据表之间的关系,而WordPress的数据库前缀也是用下划线表示的,如果直接添加下划线到数据表名称上,使用的时候就会报错。如果需要使用前缀,我们只需要给RedBeanPHP创建一个小扩展就可以了。为了更方便记忆和使用数据表名称,我们可以把需要的自定义数据表名称都定义为常量。

R::ext('model',function($type){
    return R::getRedBean()->dispense($type);
});

define('BOOKS','wp_books');

//创建数据库的时候,直接使用model,代替dispense方法即可,如下。
$book=R::model('wp_books');

创建模型,存取数据

RedBeanPHP很方便的一个特性就是自动创建数据表结构,看一下下面的代码,‘books’这个数据表在数据库中是不存在的,我们想要创建这个数据表,然后往里面保存数据。看看RedBeanPHP是怎么做的,直接通过dispense方法分配一下数据表,然后直接定义数据,定义好后,直接保存,数据表的创建完全是透明的自动的,简直像魔法世界里面的魔豆一样好用有没有。

//创建模型
$post=R::dispense('books');
$post->text='HelloWorld';
$post->content='你好,世界';

//存储数据
$id=R::store($post);

//删除数据
R::trash($book);

//根据ID获取数据
$books=R::load('books',$id);

//根据某个条件获取一条数据
$book=R::findOne('book','title=?',['SQLDreams']);

//获取所有数据
$books = R::findAll( 'book' );
$books = R::findAll( 'book' , ' ORDER BY title DESC LIMIT 10 ' );

//根据多个条件获取数据
R::find('books','course_id=?ANDmember_id=?',[$course->ID,$member->ID]);

//获取或创建数据
R::findOrCreate('books',['member_id'=>2,'lesson_id'=>3,'course_id'=>3]);

//获取数量
$count=R::count('book','pages>?',[250]);

//模糊查询
R::findLike( 'flower', [
    'color' => ['yellow', 'blue']
], ' ORDER BY color ASC ' );

实现分页查询数据

实现分页需要用到总数据量、每页现实的数据量和当前页面这三个数据,下面的示例代码中,我们使用了NettePaginator这个PHP库来帮我们实现分页。

use Nette\Utils\Paginator;
$paginator=new Paginator;

//所有数据
$all=R::find(PAY,'pid=?',[79]);

//页面
$page=(isset($_GET['page']))?$_GET['page']:1;

//设置分页
$paginator->setItemCount(count($all));
$paginator->setItemsPerPage(2);
$paginator->setPage($page);

//获取查询用的参数
$limit=$paginator->getLength();
$offset=$paginator->getOffset();

$payments=R::find(PAY,'pid=?LIMIT?OFFSET?',[79,$limit,$offset]);

有了这个ORM,我们在开发WordPress应用的时候,就不用局限于现有的数据表了,可以根据随心所欲的根据需要创建应用自己的数据表,并且很方便的存储和保存数据。详细的介绍和教程请直接参考官方文档。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。