【问题标题】:Join table to a join table in CakePHP 3.x: associations and double-action在 CakePHP 3.x 中将表连接到连接表:关联和双重动作
【发布时间】:2017-09-27 07:53:23
【问题描述】:

在书中的this example 中,我想允许其他用户修改CoursesMemberships 连接表中的字段days_attended,但每天只能修改一次。为此,我将创建一个带有id | coursesmembership_id | student_id | created | modified 字段的新连接表CoursesMembershipsReviews。问题是如何与协会相处?我会这样做:

  • 一个学生有Many CoursesMembershipsReviews 和belongsToMany CoursesMembershipsCoursesMembershipsReviews

  • a CoursesMembership hasMany CoursesMembershipsReviews 和 belongsToMany StudentsCoursesMembershipsReviews;

  • 一个CoursesMembershipsReview 属于CoursesMemberships 和属于Students

我有点困惑,因为CoursesMemberships 表本身已经是一个连接表。这是正确的方法吗?

第二个问题是如何在提交表单时避免双重操作,这将允许其他用户更改字段days_attended?如果我想检查最后一个 modified 是否为 24 小时,他将需要 edit()CoursesMemberships 并同时创建/修改 CoursesMembershipsReview。谢谢。

【问题讨论】:

    标签: mysql join associations cakephp-3.x


    【解决方案1】:

    关于第一个答案,我会做以下事情

    • Student
      • hasMany CoursesMembershipsReviews
      • belongsToMany CoursesCoursesMemberships;
    • CoursesMembership
      • 有很多CoursesMembershipsReviews
      • 属于Students
      • 属于Courses
    • CoursesMembershipsReview
      • 属于CoursesMemberships
      • 属于Students

    无论如何,您的问题并不清楚“一天一次”是指单个用户还是所有用户。

    换句话说:如果用户编辑 courseMembership 是在接下来的 24 小时内也禁止其他用户进行编辑,还是仅针对该用户?

    在第一种情况下,您甚至不需要courses_memberships_reviews 表(除非您想要它)。您只需在course_memberships 表中存储有关谁以及何时编辑记录的信息。

    在第二种情况下,当您创建CoursesMembership 实体时,您可以附加一个包含创建CoursesMembership 的用户信息的CoursesMembershipsReview 实体并同时保存两者

    【讨论】:

    • 感谢您的回答!因此,您通过 CoursesMembershipsReviews (我之前拥有的其余关联)建议 Student 和 CoursesMemberships 不属于彼此,这使生活变得更加轻松。我确实有第二种情况,但 CoursesMemberships 是由更早参与的学生创建的。其他人之后将能够修改他的记录中的 days_attended,当他们这样做时,我需要添加/编辑一个新的 CoursesMembershipsReview 实体来执行我的 24 小时检查。我仍然不清楚如何。
    • 所以你是说如果我修改了 days_attended 那么除了我之外的任何人都可以在接下来的 24 小时内再次修改它,对吧?
    • 正确。所有其他用户都可以在此字段中添加天数,但每天只能添加一次。
    • 您可以使用验证来确保这一点。您要创建应用程序规则。书中的Ser数据验证
    • 我考虑过自定义验证,但无论如何我都需要先在 CoursesMembershipsReviews 中编辑(或创建如果不存在)记录。如果我在控制器中执行此操作并通过 vlaidation 进行检查,它会起作用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多