Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Zend Framework处理多对多关系的单页表单_Mysql_Forms_Zend Framework_Many To Many - Fatal编程技术网

Mysql Zend Framework处理多对多关系的单页表单

Mysql Zend Framework处理多对多关系的单页表单,mysql,forms,zend-framework,many-to-many,Mysql,Forms,Zend Framework,Many To Many,我有一个数据库,其中两个表之间存在多对多关系(它们之间有第三个“关联”表): 例如: 现在,应用程序的要求是能够在创建用户记录的同一页面上添加多个“联系人信息”条目: 例:(表格) 因此,在上面的示例中,我有一个username字段(在user表中),一个包含与用户相关的所有联系人信息记录的表(在username字段中),它将进入contact_info表,然后是contact_type和contact_details的表单元素(在表下各自的列下)(带有添加按钮?)将联系人信息添加到联系人“表”

我有一个数据库,其中两个表之间存在多对多关系(它们之间有第三个“关联”表):

例如:

现在,应用程序的要求是能够在创建用户记录的同一页面上添加多个“联系人信息”条目:

例:(表格)

因此,在上面的示例中,我有一个username字段(在user表中),一个包含与用户相关的所有联系人信息记录的表(在username字段中),它将进入contact_info表,然后是contact_type和contact_details的表单元素(在表下各自的列下)(带有添加按钮?)将联系人信息添加到联系人“表”中。然后在所有这些信息下面,是属于用户表的更多字段

如果您一直在关注我,那么我面临的问题是,客户机希望在单个表单上显示此内容,而不是多页或分为两个表单,流必须“看起来”像单个表单(即使元素将属于不同的数据库表)

其次,将数据放入contact_info表非常简单,但是在填写其余的“user”字段并更新用户记录之前,不会生成实际的用户id,因此,我无法看到如何在user_has_contact_info中添加关联记录,而不先保存用户记录并添加第二步,删除联系人信息

最后,首选的方法是避免使用javascript(尽管没有完全排除,因为几乎所有的解决方案都需要javascript或页面刷新以及部分表单字段数据保留,甚至可能还有验证和过滤问题,但还没有达到这一步)

因此,我的最终问题是,在上面的场景中,使用Zend_表单处理多对多数据库表关系的最佳方法是什么。我可能对这个问题考虑过多,错过了这里的简单解决方案,并期待着不同的观点


请注意,这不是关于如何设计数据库的问题,而是如何创建zend表单以按设计方式处理数据库的问题。

这里似乎有两个问题:

  • 插入用户表、联系人表和用户联系人表

  • 处理动态-即客户端确定-每个用户的联系人记录数

  • 关于第二部分,请参阅Jeremy Kendall关于使用
    Zend_Form
    处理客户端确定的字段数量的文章。结果是客户端javascript跟踪与
    preValidation()配对的新字段数量
    方法,在调用
    isValid()
    getValue()
    之前读取此信息并修改表单对象

    对于第一部分,看起来你基本上是对的

  • 创建用户记录并获取用户id

  • 对于表单中的每个联系人块,创建联系人记录并获取联系人id;然后创建包含两个id的关联用户联系人记录


  • 您可能希望将其中的一部分打包到事务中,这样,如果其中一部分失败(例如,用户联系人插入失败),您就不会得到与任何用户都未连接的孤立联系人记录。

    这里似乎有两个问题:

  • 插入用户表、联系人表和用户联系人表

  • 处理动态-即客户端确定-每个用户的联系人记录数

  • 关于第二部分,请参阅Jeremy Kendall关于使用
    Zend_Form
    处理客户端确定的字段数量的文章。结果是客户端javascript跟踪与
    preValidation()配对的新字段数量
    方法,在调用
    isValid()
    getValue()
    之前读取此信息并修改表单对象

    对于第一部分,看起来你基本上是对的

  • 创建用户记录并获取用户id

  • 对于表单中的每个联系人块,创建联系人记录并获取联系人id;然后创建包含两个id的关联用户联系人记录


  • 可能希望将其中的一部分打包到事务中,以便在某一部分失败(例如,用户联系人插入失败)时,不会出现与任何用户都未连接的孤立联系人记录。

    只需检查:您确定您的模式中需要多对多吗?似乎联系人可能会分配给单个用户,但单个用户可能会这样做有许多联系人,所以您可能只需要一对多。不需要关联表,这会使它更简单。@DavidWeinraub是的,我想再看一下我上面的示例,这并不是一个多对多的好例子。在我现实生活中的数据库表结构中,我使用了几个定义为itely many to many required fields.我试图提供一个简单的例子来表达我的观点。但是,是的,我同意,我的例子有点失败了!:)只是检查:您确定您的架构中需要多对多吗?似乎一个联系人可能被分配给一个用户,虽然一个用户可能有多个联系人,所以您可能只需要一对多。不需要关联表,这会使它更简单。@DavidWeinraub yes I gues再看一看我上面的例子,这并不是一个多对多的好例子。在我的实际数据库表结构中,我正在处理几个多对多表关系,这些关系肯定是多对多必填字段。我试图提供一个简单的例子来阐明我的观点。不过,是的,我同意,我的例子有点错误失败的原因!:)是为了概念,不一定
    Table 1 : user (primary key id)
    Table 2 : contact_info (primary key id)
    Associative table: user_has_contact_info (primary key id, foreign keys: user_id and contact_info_id)
    
    UserName: ___________
    
    Contact Type    Contact Detail
    Phone           123-4567
    Email           me@here.com
    
    _________V      _______________ [Add Contact Button]
    
    ... plus more fields for the user table ...