Model view controller MVC初学者问题-编辑多对多关系

Model view controller MVC初学者问题-编辑多对多关系,model-view-controller,language-agnostic,cakephp,Model View Controller,Language Agnostic,Cakephp,我正在使用CakePHP构建一个使用MVC模式的应用程序,但我想我的问题是语言不可知 以下是我的部分数据概述: ITEMS (id, name, description) LOCATIONS (id, name) items表描述了一种类型的项目(“苹果”、“橙色”、“香蕉”),而不是单个项目 每个位置可以有任意数量的每个项目。为了保持这种多对多关系,我有以下表格: ITEMS_LOCATIONS (id, item_id, location_id, quantity) // eg (1,

我正在使用CakePHP构建一个使用MVC模式的应用程序,但我想我的问题是语言不可知

以下是我的部分数据概述:

ITEMS (id, name, description)
LOCATIONS (id, name)
items表描述了一种类型的项目(“苹果”、“橙色”、“香蕉”),而不是单个项目

每个位置可以有任意数量的每个项目。为了保持这种多对多关系,我有以下表格:

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)
现在我需要能够编辑这个“库存”信息,但我不确定到底哪个模型或控制器应该处理它


位置
控制器是否应执行
编辑库存
操作?或者
项目
控制器是否应具有
编辑位置
或什么?我应该做一个全新的模型吗?

这确实有点主观

您肯定希望在库存控制器上有一个用于编辑库存项目详细信息的编辑操作,在位置控制器上有一个用于编辑位置详细信息的编辑操作

当涉及到管理关系时,您可能想考虑如何处理该关系-您通常可能会向项目添加位置,在这种情况下,您可能希望在项目控制器上执行AddLocation操作,或者您更有可能将项目添加到位置,在这种情况下,您可能希望在位置控制器上执行AddItem操作。也许你是双向的,在这种情况下,也许创建一个ItemLocations控制器并在那里完成工作是可行的


HTH

这方面没有真正的硬性规定。使用对你最有意义的东西

在您的情况下,您可能希望控制某个位置的项目,因此像
/Location/42/Items
/Location/42/inventory
/Location/42/Items/edit
这样的URL可能最有意义。因此,在您的位置控制器中采取适当的操作

另一方面,如果您想控制项目位于哪个位置,
/item/42/locations
可能更有意义

如果两者同样“重要”,您可能需要为其制作一个额外的控制器,并使用
/inventory/edit/42
,无论这对您意味着什么


对于模型,您可以通过任何一种方式准备
$data
,以便它在使用
saveAll()
时更新HABTM模型,或者您可以像
$this->Item->ItemsLocation->save()
那样直接操作HABTM模型。通常您不需要烘焙HABTM模型,除非您需要将其连接到其他模型。

我倾向于将一个位置id传递给items controller,并让它将其作为外键存储在item记录中。

OT但是您考虑过查看CodeIgniter吗?我更喜欢它,因为它比CakePHP或Symfony轻得多。我(显然)对这些框架是全新的,所以我实际上只是在测试它们是如何工作的。CI或Kohana肯定也是我关注的对象。不过这是一种多对多(Hasandbelongtomy)关系。每个位置可以有许多项,每个项可以有许多位置,因此我不能只在items表中存储locationId