mamift / redbean4-laravel4
Redbean 4 的 Laravel 4 实现。
Requires
- php: >=5.3.3
- illuminate/support: >=4.1
This package is not auto-updated.
Last update: 2024-09-28 16:20:37 UTC
README
A Laravel 4 package for RedBeanPHP ORM 4.3.1
这是一个 Laravel 4 包,允许使用 Redbean PHP ORM(版本 4.3.1)。此版本的 Redbean 支持 PHP 5.3.4 及以上版本,并且已测试与 Laravel 4.1+ 兼容。
PHP 5.3.3 兼容性注意
如果您正在使用 Laravel 4.1 且运行 PHP 5.3.3 或更早版本,您必须使用此包的 php533 分支(在您的 composer.json 文件中使用 dev-php533)。
Laravel 4 和 PHP 5.3.3 兼容性
请注意,只有 Laravel 4.1 是与 PHP 5.3.3 部分兼容的最新版本(Laravel 4.2 使用了 PHP 5.3.3 中不可用的语言结构)。即使如此,您也必须切换到默认的 HashingProvider 并使用 PHP 5.3.3 兼容的版本;这里有一个可以使用的版本,并且已经与该包进行了测试:[https://github.com/robclancy/laravel4-hashing](https://github.com/robclancy/laravel4-hashing)
安装方法
添加
"mamift/redbean4-laravel4":"dev-master"
到您的 composer.json 文件。然后添加以下行
'Mamift\Redbean4Laravel4\Redbean4Laravel4ServiceProvider'
到您的 Laravel 服务提供者数组中,位于 config/ 目录下的 app.php 内,以便使用 Laravel 的数据库设置(在 database.php 内)设置 RedBeanPHP。
因为 RedBeanPHP 也包括它自己的外观类 ("R"),所以无需在别名数组中添加任何内容。
故障排除
此包使用 PSR-4 自动加载;如果您正在使用 Laravel 4.1,那么在您的 composer.json 中,您可能只使用了 classmap 加载。当运行 composer dump(或 composer dump-autoload)或更新到新版本时,您可能会注意到收到有关 'Mamift\Redbean4Laravel4\Redbean4Laravel4ServiceProvider' 无法找到的错误。
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'Mamift\\Redbean4Laravel4\\Redbean4Laravel4ServiceProvider' not found","file":"C:\\Users\\mmiftah\\Sites\\bpanz.com-sc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\ProviderRepository.php","line":158}}
可以通过在您的 app.php(位于 config 目录下)中临时注释掉或删除 'Mamift\Redbean4Laravel4\Redbean4Laravel4ServiceProvider' 来解决此错误消息,然后运行 php artisan optimize;然后取消注释 'Mamift\Redbean4Laravel4\Redbean4Laravel4ServiceProvider' 或将其重新添加到您的 app.php 中,它应该会正常工作。
用法
阅读 RedBeanPHP 的文档 以了解 RedBean 的完整概述。由于此包包含未经修改的完整 rb.php 文件,因此 RedBean API 文档页面列出的每个可编程接口都应可用。
一个示例
$user = R::dispense('user');
$user['description'] = "Lorem ipsum dolor sit amet, consectetur" + adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
$user->username = "mamift";
$user->gender = R::enum('gender:male');
R::store($user);
为什么要在 Laravel 中使用 RedBean?
RedBean 是一种非常灵活的方式来填充数据库,而无需担心外键关系或您的表结构如何;在某种程度上它是 'schema-less',因为它会在不关心细节的情况下构建适当的数据库和表结构。因此,它是快速原型化 Laravel 应用程序后端的一种很好的方法。您可以像使用 Laravel 的 Schema Builder 一样使用 RedBean,例如,可以省略在单独步骤中播种,因为您可以在一个迁移步骤中定义模式和用值填充表。
在上面的示例中,以下行是
$user->gender = R::enum('gender:male');
RedBean 将创建一个单独的表 'gender' 并包含适当的主键(当您使用 MySQL 时,是一个 AUTO_INCREMENTING 'ID' 列)。每次您再次使用 R::enum()(例如,R::enum('gender:female')),RedBean 就会在 'gender' 表中添加另一个 'female' 记录。
注意它没有使用内置的[ENUM]数据类型作为列类型;这使您能够定义另一个bean(它将使用相同的表),该bean可以使用相同的值集。
RedBean还会根据您bean的属性值确定适当的数据类型。在上面的示例中(至少如果您使用MySQL的话),$user['description']存储为TEXT,$user->username存储为VARCHAR(255)。
在回滚Laravel迁移时,您可能还需要使用Schema构建器方法,例如Schema::drop('user')或Schema::drop('gender'),因为RedBean不提供删除表架构的方法。相反,它允许您使用R::wipe('user')擦除bean的所有实例(相当于删除表内的所有行)。
然而,RedBean允许您通过单步操作使用R::nuke()销毁所有表格,但这将销毁数据库内的所有内容,包括migrations表。
关于此包如何向Laravel暴露RedBean的说明
由于RedBean的作者使用PHP命名空间的方式(它似乎不符合PSR-4规范),他没有提供自己的composer.json,因此rb.php文件(RedBeanPHP通常分发的文件)似乎不能由Laravel自动加载。
此包所做的是为每个请求加载rb.php。在composer.json中的"autoload" JSON对象内,rb.php被指定为"files"数组的一部分
{
"autoload": {
"files": [
"src/Mamift/Redbean4Laravel4/rb.php"
]
}
}
来自Composer文档的一句话说道
如果您想在每次请求中显式地要求某些文件,则可以使用'files'自动加载机制。如果您包中包含PHP函数,它们不能由PHP自动加载,这将很有用。