【发布时间】:2016-05-21 08:53:12
【问题描述】:
我知道这是一个重复的问题,但我认为它会对其他人有所帮助,因为有很多类似的应用程序具有这种表关系:
所以问题是使用 Eloquent 对这个模式中的所有关系的最佳解决方案是什么? 要制作多少个模型和控制器?
【问题讨论】:
标签: php laravel model controller
我知道这是一个重复的问题,但我认为它会对其他人有所帮助,因为有很多类似的应用程序具有这种表关系:
所以问题是使用 Eloquent 对这个模式中的所有关系的最佳解决方案是什么? 要制作多少个模型和控制器?
【问题讨论】:
标签: php laravel model controller
首先,您需要了解并非数据库中的所有表都代表一个实体。
例如,users、posts、comments 等表是实体。而posts_users、comments_posts 不是:它们在这里是出于技术原因,以实现两个实体之间的关系。
只有实体需要模型:为关系表建立模型是没有意义的。
即使表包含date_created 之类的信息,它也不会使其成为实体。这只是与关系相关的数据。例如,表users_roles 可能有一个名为date_assigned 的列,以了解给定用户何时被分配给定角色。这不是实体。
其次,您需要了解控制器的用途。控制器的作用是处理请求并提供结果。结果可以是一个视图、一个错误 (HTTP 404),或者只是一个操作已成功完成的事实。
您还必须区分名为Controller 的类(或扩展此基类的任何子类)和实际控制器。实际的控制器是处理请求的代码。一个 Controller 类可以有多个方法来处理请求。
都是组织的问题:一般来说,Controller类是用来对同一个作用域内的方法进行分组的:用户登录、注销、订阅、密码提醒都是同一个作用域。所有这些控制器可能属于不同的类或功能。没关系。每个方法都是一个控制器。它们被归为同一类,因为它们具有相同的需求(检查用户是否已登录,了解是否需要登录,是否可以显示订阅页面等)并且它们处于相同的范围内,这才有意义你想想看。这是合乎逻辑的:当您需要更改有关用户标识的某些内容时(即使您是该项目的新手),您知道在哪里进行搜索。
所以你需要为这些实体建立一个模型:
您需要的控制器取决于您想要/需要如何处理这些数据。您的这部分问题没有现成的答案。
使用控制器类:
但根据您的应用程序,您可能需要更多。只有你真的可以说。这个问题没有不好的答案:如果你认为一些控制器应该分开以便更好地组织,那就去做吧。如果您认为应该分组 2 组或更多组,请执行此操作。没有规则。您必须保持代码清晰且井井有条。它必须适合您的需求。就是这样。
【讨论】:
withPivot() 方法访问数据透视表列。