CakePHP:控制器中的多个模型 Action:add

CakePHP: Multiple Model in Controller Action:add

我最近才开始使用 CakePHP。框架让事情变得简单,但今天我发现自己有一个新问题。

如果 Project 模型有 image,则可以在 $this->data['Project']['image'] 之类的地方访问它。由于 1 个项目只有 1 个图像,它可以是项目 table 本身的一个字段。

但是如果 Project 有一个集合 images 呢?不会是另一个 table 说 Gallery 吗?那么我们这里说的就是两个Model。

对于前面的情况,图片可以很容易地上传到project/add,将文件名存储到projects.image。事情发生在项目模型和项目控制器中。

现在添加 ProjectGallerycake 的方法如何?

我不确定如何阅读您的问题,您是在询问数据库设计还是 CakePHP 关联?但是,假设您的项目只有一个画廊,它将是一个 hasOne 关联,所需的数据库字段将是 this

Project.id -> Gallery.project_id

项目模型中的关联为:

$hasOne = ['Gallery' => ['foreignKey' => 'project_id']];

图库模型中的关联将是:

$belongsTo = ['Project' => ['foreignKey' => 'project_id']];

只要您的字段遵循框架的命名约定,您就不需要声明它们,cake 会自动为您检测正确的字段。

But what about if Project has a collection of images? Wouldn't it be another table say Gallery? Then we're talking about two Model here.

没有 "better" 方法,恕我直言,这取决于您的需要和想要的。理论上你也可以在项目模型中这样做:

$hasMany= ['Image' => ['foreignKey' => 'project_id']];

Read this section,整篇,官方手册,详细描述了table是如何链接在一起的

只有一个建议:我永远不会将文件信息存储在另一个 table 中,但 总是 将我的数据与文件或图像相关联 table。这些文件也不应该作为 blob 存储在数据库中。您可以查看 this plugin 及其文档以获得更详细的解释。

另外,刚开始使用CakePHP,为什么已经有3.0了,还用老2.x版本的框架?我会选择 3.0,因为它与 2.x 分支有点不同。如果你以后必须从 2 切换到 3,你将不得不重新学习一些东西。