database - 在 Laravel 4 中构建 SAAS 的正确方法

标签 database laravel laravel-4 saas stripe-payments

好吧,大约一年前,我编写了一个网络应用程序来帮助我父亲的公司安排约会。他现在“没有它就做不了生意”。我决定要从中构建一个 SAAS 订阅模型并将其向公众开放。

它目前建立在 codeigniter 和 php 之上,我认为这不适合 SAAS 版本。我计划在 laravel 4 中从头开始重建它并使用 stripe 作为支付网关。

我关心的是如何最好地处理多个客户端的数据库/应用程序结构。目前,它只服务于一个企业,非常不抽象,而且是专门针对我父亲公司的需求的。我需要它能够根据使用它的业务处理不同的数据。

我已经研究过 Multi-Tenancy ,但我不确定这是否适合。我认为“gmail”风格的方法会更好。一个应用程序/域,用户在登录后将看到他们的自定义仪表板,并且只能看到他们的数据。

在我陷入编码之前,我需要弄清楚如何最好地处理一个数据库上的多个“帐户”。我不想为每个用户创建一个表,也不想为每个用户创建一个数据库。

我想我的问题是任何人都可以指出正确的方向以了解如何最好地处理 Laravel 中的每月付款订阅吗?我纠结的与其说是代码,不如说是我需要构建什么来处理每月向客户收费并在计费失败时拒绝他们访问等问题。

谢谢

最佳答案

您需要大量阅读和大量工作!

首先,让我们暂时完全忽略计费方面的问题 — 归根结底,应用程序的这一部分确实相当微不足道。从37signals Rework中取出一页(第 93 和 94 页)并在您开始实现之前启动您的产品并免费试用 30 天(到那时您应该知道如何实现)。

其次,为什么您认为“gmail”不使用 Multi-Tenancy ,URI 结构没有说明底层数据库结构。我非常有信心他们不会为他们的每一位客户克隆数据库模式。因此,您可能已经回答了自己的问题 — 您想实现 Multi-Tenancy

您将想要抽象化您的数据库(和应用程序架构),老实说,没有比 Taylor Otwell(Laravel 的创始人)的书更好的资源来帮助您实现这一目标 Laravel: From Apprentice To Artisan .他的书不适合初学者,当你读完这本书时,你应该能够自己回答这个问题。

您不会为每个用户创建一个表或数据库,您甚至不会为每个组织创建一个。相反,您将在代码中创建抽象的数据库结构,这会将您的用户数据从数据库中提取出来。

考虑将检查访问组织的权限作为另一层用户身份验证。对于每个请求,您都将检查该用户是否可以访问特定组织。您可能还会检查以确保该组织仍然有效(是否因为他们没有付款而过期?)这将再次发生在每个请求上并且可能带有 filter within laravel。 .

这确实导致了开发 SaaS 应用程序的下一个非常重要的因素。

我不了解你,但我很偏执,如果我不确定用户号 4506 看不到数据,我晚上睡不好觉一个他不属于的组织。确保这一点的唯一真正好的方法是通过单元测试,如果您还没有学习过,我强烈建议您学习。

在 Laravel 4 中执行此操作的最佳方法是阅读 Jeffrey Way 的书 Laravel Testing Decoded .这本书非常先进,但如果您很好地掌握了基础知识,仍然很容易理解。

最后但同样重要的是,第一件事是参与社区——我建议这样做的最简单方法是闲逛 #laravel IRC channel (自由节点)。问一些问题,也许回答一些问题, channel 中的每个人都非常友善且 react 迅速。

您绝对是在冒险,不要害怕提问和犯错。祝你好运。

关于database - 在 Laravel 4 中构建 SAAS 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18290863/

相关文章:

database - SQLite3算多少算?

php - Laravel 5.4 - 在同一数据库中将数据从一个表复制到另一个表

php - Laravel Migration - 在表中添加检查约束

php - Laravel Auth 不工作,一切似乎都是正确的

sql-server - SQL Server 连接到 Node js

mysql - 使用 SQL 的返回值作为另一个查询中的参数

php - 在 Laravel Php 中打印服务器端的值

php - 具有命名空间的 laravel 路由资源

java - 如何在android中调用方法后恢复xml状态

php - Laravel 如何仅在值更改时更新 mysql 中的值