gpt4 book ai didi

php - 在 CakePHP 中提交对象的表单数据时,跨表添加一对多关系的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 13:24:57 25 4
gpt4 key购买 nike

我有以下简化的架构:

CREATE TABLE IF NOT EXISTS `photos` (
`id` varchar(20) NOT NULL,
`title` varchar(200) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`photo_id` varchar(20) NOT NULL,
`category` enum('lasers','dinosaurs','space') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

一张照片可以没有、一个或多个与之关联的类别。

在表单中,类别由复选框表示,因为此输入类型与“无、一个或多个”选择的模型匹配。

这是我的问题:

  1. 使用 CakePHP FormHelper,有办法显示每个枚举值的复选框吗?

  2. 提交表单时,所有这些数据都可以由框架处理并通过 save() saveAll() 调用正确插入到两个表中吗?或者我是否需要做一些预处理/自定义脚本?

  3. 是否可以整合这些关系,以便对它们进行排序/分页等。当获取数据时。例如。我可以对属于“激光”类别的照片进行排序/过滤吗?

  4. 我的方向正确吗?

最佳答案

  1. CakePHP 本身不支持枚举,因此您需要手动获取它们。然后,您可以按如下方式使用表单助手(未经测试):

    echo $this->Form->input('Category.id', array(
    'type' => 'select',
    'multiple' => 'checkbox',
    'options' => $categories, // id => name array
    ));
  2. 使用saveAssociated()推荐使用,它会在保存类别时自动将 photo_id 添加到类别中。

  3. 您可以通过添加分页条件进行过滤,但排序会更复杂,因为照片可以有多个类别。

  4. 除非您确定类别不会改变,否则最好使用 Has And Belongs To Many关系。

关于php - 在 CakePHP 中提交对象的表单数据时,跨表添加一对多关系的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20266658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com