mrblackus/laravel-storedprocedures

此包的最新版本(0.1.2)没有可用的许可证信息。

0.1.2 2015-01-20 17:57 UTC

This package is not auto-updated.

Last update: 2024-09-28 14:07:01 UTC


README

Build Status

Laravel 存储过程

此包允许您在 Laravel 4 中使用 PostgreSQL 存储过程。它允许您生成模型,以便在 PHP 代码中简单地使用这些存储过程。

Laravel 5 用户

您可以通过这个分支来检查由3IE制作的更改,以使用 Laravel 5 中的 laravel-storedprocedures。

安装

包安装

使用 Composer

在您的 composer.json 中添加以下依赖项以要求此包

"mrblackus/laravel-storedprocedures": "0.1.*"

然后使用 composer updatecomposer install 更新 composer。

使用 Laravel Bundle

如果您不想使用 Composer,可以通过输入以下命令使用 Laravel Bundle 来安装它

php artisan bundle:install StoredProcedure

注册服务提供者

安装包后,请将 ServiceProvider 添加到 app/config/app.php 中的 providers 数组中

'providers' => array(
    'Mrblackus\LaravelStoredprocedures\LaravelStoredproceduresServiceProvider'
);

使用方法

您可以通过键入以下命令生成存储过程(即 函数)的模型

php artisan generate-sp

只有名称以 sp_ 开头的存储过程才会生成模型,其他将忽略。 模型将写入 app/store_procedures 目录(或配置文件中定义的目录)。不要编辑这些模型! 它们将在下一次生成时被覆盖。

配置

您可以通过发布配置文件并编辑它来覆盖默认配置。

php artisan config:publish mrblackus/laravel-storedprocedures

您可以更改要读取的数据库模式以及写入存储过程模型的目录。

return array(
    'schema'         => 'public',
    'model_save_dir' => 'stored_procedures/'
);

模型

生成的模型有一个 execute() 方法,允许您执行存储过程并从中获取结果(如果该过程返回一个)。

如果过程有 IN 或 INOUT 参数,则 execute() 方法将有相同的参数,顺序相同。

如果它有 OUT 或 INOUT 参数,则模型将具有为每个 OUT 参数设置的 getter/setter 属性。

设置器不会修改数据,它们仅存在,以便您可以在使用整个模型而不是简单变量的情况下格式化数据。

示例

以下存储过程用于检索用户的所有好友,其中包含其 ID...

CREATE OR REPLACE FUNCTION sp_getfriends(IN id integer, OUT id integer, OUT username character varying, OUT firstname character varying, OUT lastname character varying, OUT facebook_id character varying)
  RETURNS SETOF record AS
$BODY$SELECT id, username, firstname, lastname, facebook_id
FROM users
LEFT JOIN friends ON users.id = friends.friend_with_id
WHERE friends.user_id = $1$BODY$
  LANGUAGE sql VOLATILE
  COST 100
  ROWS 1000;

...我们将生成一个 SP_Getfriends 类。我们可以这样使用它

$userId = 20;
$friends = SP_Getfriends::execute($userId);

$firstFriend = $friends[0];
$friend->getId();
$friend->getUsername();
$friend->getFacebookid();

Bitdeli Badge