Database CakePHP:控制器操作中的多个模型:添加

Database CakePHP:控制器操作中的多个模型:添加,database,cakephp,cakephp-2.0,Database,Cakephp,Cakephp 2.0,我最近刚开始学习CakePHP。这个框架让事情变得简单,但今天我发现了一个新问题 如果一个项目模型有一个图像,它可以在类似$this->data['Project']['image']的地方访问。因为只有一个映像对应一个项目,所以它可以是项目表本身中的一个字段 但是如果项目有一组图像呢?难道不是另一张桌子上写着“画廊”?然后我们在这里讨论两个模型 对于前一种情况,图像可以很容易地上传到project/add,将文件名存储到projectsimage。事情发生在项目模型和项目控制器中 现在,当添加

我最近刚开始学习CakePHP。这个框架让事情变得简单,但今天我发现了一个新问题

如果一个
项目
模型有一个
图像
,它可以在类似
$this->data['Project']['image']
的地方访问。因为只有一个映像对应一个项目,所以它可以是项目表本身中的一个字段

但是如果
项目
有一组
图像
呢?难道不是另一张桌子上写着“画廊”?然后我们在这里讨论两个模型

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


现在,当添加一个带有
图库的
项目
时,蛋糕是如何做的?

我不知道如何阅读您的问题,您是在询问DB设计还是CakePHP关联?但是,假设您的项目只有一个库,它将是一个hasOne关联,那么所需的数据库字段将如下所示

Project.id -> Gallery.project_id
项目模型中的关联为:

$hasOne = ['Gallery' => ['foreignKey' => 'project_id']];
$belongsTo = ['Project' => ['foreignKey' => 'project_id']];
库模型中的关联为:

$hasOne = ['Gallery' => ['foreignKey' => 'project_id']];
$belongsTo = ['Project' => ['foreignKey' => 'project_id']];
只要字段遵循框架的命名约定,您就不需要声明它们,cake将自动为您检测正确的字段

但若项目有一组图像呢?这不是另一张桌子吗?然后我们在这里讨论两个模型

没有“更好”的方法,因为这取决于你需要什么和想要什么。理论上,在项目模型中也可以这样做:

$hasMany= ['Image' => ['foreignKey' => 'project_id']];
在官方手册的整个章节中,它详细描述了表格是如何链接在一起的

只有一个建议:我永远不会将文件信息存储在另一个表中,而是始终将数据与文件或图像表关联。文件也不应作为blob存储在DB中。您可以查看它的文档以获得更详细的解释


另外,当您刚开始使用CakePHP时,为什么要在已有3.0版本的框架下使用旧的2.x版本?我会选择3.0,因为它与2.x分支有点不同。如果以后必须从2切换到3,则必须重新学习一些内容。

谢谢您的建议。我认为
/cake bake
是如此强大,如果它没有烘焙出与我想要的类似的东西,那么我可能在某个地方出错了。事实上,我没有通读模特协会的章节。为什么是旧的2.x Cakephp?只是因为我工作的公司还没有迁移到3.0。再次感谢您的推荐。