搜索
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
在Laravel中使用Flash会话数据在Laravel中使用Flash会话数据Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展php中的卷曲:如何在REST API中使用PHP卷曲扩展Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了简化的HTTP响应在Laravel测试中模拟了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12个最佳PHP聊天脚本在Codecanyon上的12个最佳PHP聊天脚本Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

PHP记录:PHP日志分析的最佳实践PHP记录:PHP日志分析的最佳实践Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

解释PHP中晚期静态结合的概念。解释PHP中晚期静态结合的概念。Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

在Laravel中发现文件下载的存储::下载在Laravel中发现文件下载的存储::下载Mar 06, 2025 am 02:22 AM

Laravel框架的Storage::download方法提供了一个简洁的API,用于安全地处理文件下载,同时管理文件存储的抽象。 以下是一个在示例控制器中使用Storage::download()的例子:

如何注册和使用Laravel服务提供商如何注册和使用Laravel服务提供商Mar 07, 2025 am 01:18 AM

Laravel的服务容器和服务提供商是其架构的基础。 本文探讨了服务容器,详细信息服务提供商创建,注册,并通过示例演示了实际用法。 我们将从OVE开始

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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