目录
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

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

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

See all articles