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

什么';在CakePHP中提交对象的表单数据时,跨表添加一对多关系的正确方法是什么?,php,mysql,cakephp,cakephp-model,Php,Mysql,Cakephp,Cakephp Model,我有以下简化模式: 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_INCREMEN

我有以下简化模式:

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;
照片可以没有、一个或多个类别与其关联

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

以下是我的问题:

  • 使用CakePHP FormHelper,有没有办法显示每个枚举值的复选框

  • 提交表单时,框架是否可以处理所有这些数据,并在save()saveAll()调用中将其正确插入两个表中?还是我必须做一些预处理/自定义脚本

  • 是否可以集成这些关系,以便在获取数据时对它们进行排序/分页等。例如,我是否能够对属于“激光”类别的照片进行排序/过滤

  • 我走对了吗

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

    echo$this->Form->input('Category.id',数组(
    '类型'=>'选择',
    “多个”=>“复选框”,
    'options'=>$categories,//id=>name数组
    ));
    
  • 建议使用,它会在保存类别时自动将
    photo\u id
    添加到类别中

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

  • 除非你确信这些类别不会改变,否则最好使用关系