目录
RedBeanPHP 的主要功能是什么?
RedBeanPHP 与其他 ORM 工具相比如何?
如何安装和设置 RedBeanPHP?
RedBeanPHP 中的“流式模式”是什么?
RedBeanPHP 如何处理对象之间的关系?
我可以将 RedBeanPHP 与我现有的数据库一起使用吗?
RedBeanPHP 是否适合大型复杂项目?
RedBeanPHP 如何处理安全性?
RedBeanPHP 中的“bean 罐装”是什么?
我可以在没有 Composer 的情况下使用 RedBeanPHP 吗?
首页 后端开发 php教程 Redbean简介

Redbean简介

Feb 23, 2025 am 08:27 AM

Introduction to Redbean

核心要点

  • RedBeanPHP是一个ORM(对象关系映射器),它可以动态创建和修改底层数据库模式,非常适合原型设计和加快开发速度。
  • RedBeanPHP允许您创建对象(或“bean”)并将其保存到数据库中,即使没有对应的表,它也会自动调整模式以适应。
  • RedBeanPHP通过“拥有”相关对象的理念支持对象之间的关系,包括一对一、一对多和多对多关系。
  • RedBeanPHP的“流式模式”允许在对象更改时自动调整数据库模式,但建议在生产环境中切换到“冻结模式”,以提高性能和安全性。
  • 虽然RedBeanPHP是原型设计和快速迭代的绝佳工具,但在生产环境中使用时也需要谨慎,例如检查列数据类型、外键、关系和索引。

RedBeanPHP 简介

在快速应用开发(RAD)和原型设计方面,有很多工具可以帮助您快速启动项目。从快速入门到微型框架,从Composer之类的构建工具到一键式安装程序,当然还有ORM——有很多方法可以加快开发速度。我们将重点介绍RedBeanPHP,一个与众不同的ORM,非常适合原型设计。

RedBeanPHP 入门

RedBeanPHP是一个ORM(对象关系映射器),但它不仅仅是一个ORM——它可以动态创建和修改底层数据库模式。传统上,您会将ORM用作预先规划的、预先存在的数据库模式的包装器。这对大多数项目来说都没问题,但是当您进行原型设计(或边做边想)时,让它在后台为您完成可以进一步加快速度。

当您使用RedBeanPHP创建对象(或bean)时,只要您将其保存到数据库,模式就会自动调整以适应。即使您尝试保存没有对应表的对象,这也适用!

安装

安装RedBeanPHP最简单的方法是下载一体化软件包。然后,您只需要引入单个文件rb.php即可。

您也可以通过Composer安装;但是,库的作者不推荐这种方法——请参阅安装页面了解详情。

分发 Bean

使用RedBeanPHP的第一步是“分发”一个bean——它基本上就是一个对象。请注意,在本文的其余部分,我将“bean”和对象互换使用。

分发是通过上层RedBean类“R”的静态方法完成的,该方法将类型作为参数。

例如:

$user = R::dispense('user');
登录后复制
登录后复制
登录后复制
登录后复制

这将创建一个空的user对象,您可以为其分配属性。您还可以通过添加所需数量作为第二个参数来同时分发多个bean:

$users = R::dispense('user', 10);
登录后复制
登录后复制
登录后复制
登录后复制

在这个阶段,数据库中是否存在表来保存它并不重要;只要我们尝试存储它,RedBeanPHP就会处理它。

让我们尝试一下——请注意静态方法store的使用,该方法用于写入数据库:

$user = R::dispense('user');
登录后复制
登录后复制
登录后复制
登录后复制

在大多数ORM中,如果您尚未创建表来保存用户,则此操作会失败。但是,使用RedBeanPHP,此操作会成功,因为它会为您创建表。如果您在这个阶段查看您的数据库,您应该会看到这样的表:

$users = R::dispense('user', 10);
登录后复制
登录后复制
登录后复制
登录后复制

由于需要,命名约定非常严格;它是您指定的类型的单数、小写表示。

现在让我们看看如何在迭代时模式发生变化。用户记录可能需要一个密码字段——但我们忘记创建了。

如果您这样做:

$user->name = 'Joe Bloggs';
$user->email = 'joe.bloggs@example.com';
$id = R::store($user);
print $id;
登录后复制
登录后复制
登录后复制

这次,RedBeanPHP知道如何存储用户,但是数据库表无法容纳新的字段。没关系——它只需添加一个,您的表现在看起来像这样:

<code>user
----

id      int(11) UN PK AI
name    varchar(255)
email   varchar(255)</code>
登录后复制
登录后复制
登录后复制

(以下内容与原文类似,但进行了语句结构和用词上的调整,并保持了图片位置和格式不变)

字段数据类型

RedBeanPHP会根据您提供的信息尝试猜测字段的数据类型。因此,如果您这样做:

$user->password = 'secret';
R::store($user);
登录后复制
登录后复制
登录后复制

您会发现age字段已创建为tinyint。

如果字段类型稍后不足,RedBeanPHP会动态更改它。如果您现在尝试将3000赋值给age,则该列将更改为int。如果您将名称拼写为“thirty”,它将更改为varchar。将varchar字段设置为超过255个字符,它将变成TEXT字段,依此类推。

查找 Bean

您可以使用load方法按主键加载特定对象:

<code>user
----

id          int(11) UN PK AI
name        varchar(255)
email       varchar(255)
password    varchar(255)</code>
登录后复制
登录后复制
登录后复制

您可以使用batch方法一次加载多个对象(按主键):

$user->age = 30;
R::store($user);
登录后复制
登录后复制

这将返回一个bean数组。

您还可以使用SQL查找bean。find方法的第二个参数本质上是从WHERE子句开始的SQL,不包括WHERE关键字本身。例如,要查找年龄不到20岁的用户:

$user = R::load('user', 1);
登录后复制

请注意,我们正在绑定参数,因此第三个参数是一个数组。这将返回一个使用其ID作为键的bean数组。

您可以向SQL添加更多子句,例如:

计数

您可以使用count方法查找记录数:

$users = R::batch('user', array(1, 2, 3));
登录后复制

删除

要删除单个bean,请使用trash

$users = R::find('user', 'age < 20');
登录后复制

要删除特定类型的多个bean,请使用trashAll

$number_of_users = R::count('user');
登录后复制

要删除特定类型的全部bean,请使用wipe

R::trash($user);
登录后复制

或者,要删除所有内容——这在原型设计时可能很有用——您可以使用nuke

R::trashAll('user');
登录后复制

关系

与任何ORM一样,也支持对象之间的关系。

一对多关系使用“拥有”相关对象的理念来引用。例如,如果订单只有一个用户,则该用户被称为“拥有”这些订单。通过使用特定的变量名,我们可以像这样建立这种关系:

$user = R::dispense('user');
登录后复制
登录后复制
登录后复制
登录后复制

这里的关键元素是属性ownOrders。如果您现在检查您的数据库,您应该会发现RedBeanPHP已将字段user_id添加到order表中,以及相应的外键。

“拥有”订单的用户可以简单地作为属性访问,例如:

$users = R::dispense('user', 10);
登录后复制
登录后复制
登录后复制
登录后复制

为了演示多对多关系,让我们创建一些角色:

$user->name = 'Joe Bloggs';
$user->email = 'joe.bloggs@example.com';
$id = R::store($user);
print $id;
登录后复制
登录后复制
登录后复制

角色不仅仅属于单个用户;它们是共享的。因此,要将前两个角色分配给用户,并在这样做时在数据库中建立关系,我们可以这样做:

<code>user
----

id      int(11) UN PK AI
name    varchar(255)
email   varchar(255)</code>
登录后复制
登录后复制
登录后复制

这次,您应该会发现一个名为role_user的新表,它将此关系定义为多对多关系。

您可以通过读取属性来获取属于用户的角色:

$user->password = 'secret';
R::store($user);
登录后复制
登录后复制
登录后复制

这会在第一次访问角色时延迟加载它们。

关系还有很多内容,包括使用link向关系添加属性、按链接过滤、急切加载等等——请查看文档了解详情。

模型

您可以创建模型以对应于bean类型,只需遵循某些命名约定即可。然后,模型使用FUSE连接到bean;也就是说,通过遵循相关的命名约定,它们被融合在一起。

约定很简单;用下划线分隔“Model”和类型,例如Model_Type。例如,要为用户创建模型,您只需执行以下操作:

<code>user
----

id          int(11) UN PK AI
name        varchar(255)
email       varchar(255)
password    varchar(255)</code>
登录后复制
登录后复制
登录后复制

定义模型后,您可以实现许多方法,这些方法将在bean生命周期的不同点被调用。下表说明了CRUD操作与您可以实现的“钩子”之间的映射:

操作 钩子方法
R::store $model->update()
R::store $model->after_update()
R::load $model->open()
R::trash $model->delete()
R::trash $model->after_delete()
R::dispense $model->dispense()

例如,您可以通过实现update()来添加验证:

$user = R::dispense('user');
登录后复制
登录后复制
登录后复制
登录后复制

您当然也可以创建自己的方法以及自定义GETter。

查询数据库

您可以像这样执行原始SQL查询:

$users = R::dispense('user', 10);
登录后复制
登录后复制
登录后复制
登录后复制

您可以像这样返回一个多维行数组:

$user->name = 'Joe Bloggs';
$user->email = 'joe.bloggs@example.com';
$id = R::store($user);
print $id;
登录后复制
登录后复制
登录后复制

此外,您可以使用参数绑定:

<code>user
----

id      int(11) UN PK AI
name    varchar(255)
email   varchar(255)</code>
登录后复制
登录后复制
登录后复制

您可以像这样获取单个列:

$user->password = 'secret';
R::store($user);
登录后复制
登录后复制
登录后复制

您还可以使用表的两列获取关联数组:

<code>user
----

id          int(11) UN PK AI
name        varchar(255)
email       varchar(255)
password    varchar(255)</code>
登录后复制
登录后复制
登录后复制

部署您的应用程序

虽然它可以说是最适合原型设计(或至少是开发)的——但只要您遵循某些步骤,就没有理由不能将RedBeanPHP继续用于生产环境。

RedBeanPHP动态更新模式的机制称为“流式模式”;但是,这并不适合生产环境,并且性能开销相当大。但是,您可以通过“冻结”它来关闭它:

$user->age = 30;
R::store($user);
登录后复制
登录后复制

在投入生产环境时,您需要遵循以下几个步骤:

  • 检查列数据类型
  • 检查外键和关系
  • 检查索引——RedBeanPHP会创建一些索引——并根据需要进行修改

总结

在本文中,我介绍了RedBeanPHP,它是一种方便的方法,可以通过让您无需先构建底层模式即可处理域模型来启动您的开发过程。它是否适合生产环境还有待观察——但对于原型设计和快速迭代,它是一个很棒的小工具。我没有涵盖很多内容,因此请务必查看文档。

RedBeanPHP常见问题解答

RedBeanPHP 的主要功能是什么?

RedBeanPHP是一个简单、轻量级的对象关系映射(ORM)工具,它提供了一系列旨在简化数据库交互的功能。它以其“零配置”方法而闻名,这意味着它只需要最少的设置和配置。它会根据您创建的对象自动构建数据库模式,并且在对象更改时可以根据需要调整模式。RedBeanPHP还支持流式模式和冻结模式,使您可以轻松地在开发和生产环境之间切换。它包括内置的树结构,并支持bean罐装和分发,以便轻松存储和检索对象。

RedBeanPHP 与其他 ORM 工具相比如何?

与其他ORM工具相比,RedBeanPHP以其简单易用性而脱颖而出。它不需要配置文件、SQL或模型类。这使其成为初学者或项目(其中全功能ORM显得多余)的绝佳选择。但是,它仍然提供强大的功能,例如自动模式修改和树结构,使其足以胜任更复杂的项目。

如何安装和设置 RedBeanPHP?

RedBeanPHP可以通过Composer(一个流行的PHP依赖项管理工具)安装。安装后,您可以通过在脚本中包含RedBeanPHP文件并设置数据库连接来设置RedBeanPHP。RedBeanPHP将根据您的对象自动创建和修改表。

RedBeanPHP 中的“流式模式”是什么?

流式模式是RedBeanPHP的一项功能,它允许它在对象更改时自动调整数据库模式。这在开发过程中可以节省大量时间,因为您不必每次更改对象时都手动修改数据库。但是,建议出于性能和安全原因在生产环境中切换到“冻结模式”。

RedBeanPHP 如何处理对象之间的关系?

RedBeanPHP支持对象之间的几种关系类型,包括一对一、一对多和多对多。这些关系是通过使用“bean”(表示数据库表中行的简单对象)来处理的。您可以轻松地将bean相互关联以表示对象之间的关系。

我可以将 RedBeanPHP 与我现有的数据库一起使用吗?

是的,RedBeanPHP可以与现有数据库一起使用。但是,请注意,RedBeanPHP的自动模式修改功能可能会更改数据库结构,因此建议在使用RedBeanPHP之前备份数据库。

RedBeanPHP 是否适合大型复杂项目?

虽然RedBeanPHP以其简单易用性而闻名,但它还提供强大的功能,使其也适合大型复杂项目。它的自动模式修改、对各种关系类型的支持以及内置的树结构在大型项目中都非常有用。但是,对于非常大型或复杂的项目,更全面的ORM工具可能更合适。

RedBeanPHP 如何处理安全性?

RedBeanPHP包含多项旨在增强安全性的功能。它使用预处理语句来帮助防止SQL注入攻击,并建议在生产环境中使用“冻结模式”以防止意外的模式更改。但是,与任何工具一样,务必遵循安全最佳实践并使RedBeanPHP保持最新状态。

RedBeanPHP 中的“bean 罐装”是什么?

bean罐装是RedBeanPHP的一项功能,它允许您一次存储和检索整个bean(对象)集。这可能是处理大量数据的便捷方法,并且还可以通过减少数据库查询次数来帮助提高性能。

我可以在没有 Composer 的情况下使用 RedBeanPHP 吗?

虽然Composer是安装RedBeanPHP的推荐方法,但也可以直接下载并包含RedBeanPHP文件到您的脚本中。但是,使用Composer可以更轻松地管理和更新RedBeanPHP以及项目可能具有的任何其他依赖项。

以上是Redbean简介的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP 8.1中的枚举(枚举)是什么? PHP 8.1中的枚举(枚举)是什么? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

什么是REST API设计原理? 什么是REST API设计原理? Apr 04, 2025 am 12:01 AM

RESTAPI设计原则包括资源定义、URI设计、HTTP方法使用、状态码使用、版本控制和HATEOAS。1.资源应使用名词表示并保持层次结构。2.HTTP方法应符合其语义,如GET用于获取资源。3.状态码应正确使用,如404表示资源不存在。4.版本控制可通过URI或头部实现。5.HATEOAS通过响应中的链接引导客户端操作。

您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? 您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? Apr 05, 2025 am 12:03 AM

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

PHP中的匿名类是什么?您何时可以使用它们? PHP中的匿名类是什么?您何时可以使用它们? Apr 04, 2025 am 12:02 AM

匿名类在PHP中的主要作用是创建一次性使用的对象。1.匿名类允许在代码中直接定义没有名字的类,适用于临时需求。2.它们可以继承类或实现接口,增加灵活性。3.使用时需注意性能和代码可读性,避免重复定义相同的匿名类。

See all articles