我最近刚开始使用CakePHP。框架让事情变得简单,但今天我发现自己是一个新问题。
如果Project
模型具有image
,则可以在$this->data['Project']['image']
之类的地方访问该模型。由于只有1个图像到1个项目,因此它可以是Project表本身中的一个字段。
但如果Project
有images
的集合呢?这不是另一张表Gallery
吗?然后我们在这里谈论两个模型。
对于上一个案例,可以在project/add
轻松上传图片,将文件名存储到projects
。image
。事情发生在项目模型和项目控制器中。
现在,在添加Project
Gallery
时, cake 的方法是怎样的?
答案 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,你将不得不再学习一些东西。