我正在使用CakePHP使用MVC模式构建应用程序,但我想我的问题与语言无关。
以下是我数据的一部分概述:
ITEMS (id, name, description)
LOCATIONS (id, name)
项目表描述了一种项目(“苹果”,“橙色”,“香蕉”),而不是单个项目。
每个位置可以包含任意数量的每个项目。为了保持这种多对多关系,我有这个表:
ITEMS_LOCATIONS (id, item_id, location_id, quantity)
// eg (1, "home", "apple", 5) --> I have 5 apples at home
// (2, "work", "apple", 2) --> I have 2 apples at work
// (1, "home", "orange", 1) --> 1 orange at home
// (Don't worry - I have numeric ids... this is just an example)
现在我需要能够编辑这个“库存”信息,但我不确定究竟哪个型号或控制器应该处理它?
locations
控制器是否应采取editInventory
动作?或者items
控制器应该editLocations
还是什么?我应该制作一个全新的模型吗?
答案 0 :(得分:1)
这确实是主观的。
您肯定希望在库存控制器上有编辑操作,以编辑库存项目详细信息,并在位置控制器上编辑操作以编辑位置详细信息。
在管理关系时,您可能想要考虑如何使用该关系 - 您通常是否可能在项目中添加位置,在这种情况下,您可能需要在Items控制器上执行AddLocation操作,或者您是否更有可能将项目添加到位置,在这种情况下,您可能希望在位置控制器上执行AddItem操作。也许你是双向的,在这种情况下,也许创建一个ItemLocations控制器并在那里工作是可行的....
HTH
答案 1 :(得分:1)
对此没有真正的硬性规定。使用最有意义的东西。
在您的情况下,您可能希望控制某个位置的商品,因此使用/location/42/items
或/location/42/inventory
或/location/42/items/edit
这样的网址可能会最有意义的。因此,在LocationsController中进行适当的操作。
反过来说,如果你想控制一个项目的位置,/item/42/locations
可能更有意义。
如果两者同样“重要”,您可能需要为它制作一个额外的控制器并使用/inventory/edit/42
,无论具体对您意味着什么。
对于模型,您可以准备$data
任一方式,以便在使用saveAll()
时更新HABTM模型,或者您可以像$this->Item->ItemsLocation->save()
一样直接操作HABTM模型。通常您不需要烘焙 HABTM模型,除非您需要将其连接到其他模型。
答案 2 :(得分:0)
我倾向于将位置ID传递给项目控制器,并将其作为外键存储在项目记录中。