【问题标题】:CakePHP: Multiple Model in Controller Action:addCakePHP:控制器动作中的多个模型:添加
【发布时间】:2015-05-06 09:49:28
【问题描述】:

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

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

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

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

现在在添加ProjectGallery 时,cake 的方法是什么?

【问题讨论】:

    标签: database cakephp cakephp-2.0


    【解决方案1】:

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

    Project.id -> Gallery.project_id
    

    项目模型中的关联是:

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

    画廊模型中的关联是:

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

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

    但是如果 Project 有一组图像呢?不会是另一张桌子说画廊吗?那么我们这里说的是两个Model。

    没有“更好”的方法,恕我直言,这取决于您的需要和想要的。理论上你也可以在项目模型中做到这一点:

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

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

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

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

    【讨论】:

    • 感谢您的建议。我认为./cake bake 是如此强大,如果它没有烤出类似于我想要的东西,那么我可能在某个地方错了。事实上,我没有通读模特协会部分。为什么是旧的 2.x Cakephp?只是因为我工作的公司还没有迁移到 3.0。再次感谢您的推荐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多