CakePHP:Controller中的多个模型动作:添加

时间:2015-05-06 09:49:29

标签: database cakephp cakephp-2.0

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

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

但如果Projectimages的集合呢?这不是另一张表Gallery吗?然后我们在这里谈论两个模型。

对于上一个案例,可以在project/add轻松上传图片,将文件名存储到projectsimage。事情发生在项目模型和项目控制器中。

现在,在添加Project Gallery时, cake 的方法是怎样的?

1 个答案:

答案 0 :(得分:2)

我不确定如何阅读您的问题,您要求数据库设计还是CakePHP协会?但是,假设您的项目只有一个库,那么它将是一个hasOne关联,所需的数据库字段就是

Project.id -> Gallery.project_id

项目模型中的关联将是:

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

图库模型中的关联将是:

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

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

  

但是,如果Project有一组图像呢?这不是另一张桌子吗?然后我们在这里谈论两个模型。

没有“更好”的方式,恕我直言,这取决于你需要和想要的东西。从理论上讲,您也可以在项目模型中执行此操作:

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

Read this section,官方手册的整个部分,详细描述了表格如何链接在一起。

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

另外,当你刚开始使用CakePHP时,为什么在已经有3.0的时候使用旧的2.x版本的框架呢?我会选择3.0,因为它与2.x分支略有不同。如果你必须稍后从2切换到3,你将不得不再学习一些东西。