【问题标题】:CakePHP: Relationship QuestionsCakePHP:关系问题
【发布时间】:2013-09-09 13:54:21
【问题描述】:

我在确定我的第一个 CakePHP 项目的关系时遇到了问题。我正在尝试建立一个背包装备清单管理系统。这是我的表格:

Gear - 每个装备项都属于一个类别,但可以在许多装备列表中,但是是用户特定的。

类别 - 上述装备项目的类别。类别是唯一的。

装备列表 - 每个装备列表都可以分配给许多不同的行程,并且是用户特定的。项目添加到此列表后,将无法再次添加。

旅行 - 每个旅行都有一个装备列表。每一次旅行都是独一无二的。

用户 - 每个用户都有自己的物品、类别、装备清单和旅行。

我的问题,我应该为齿轮列表设置什么模型,我应该使用什么关系?是否应该有一个包含两个表中数据的 Gear List Items 表?如何将多个项目添加到数据库中的单个齿轮列表中?我需要在同一行存储多个 item_id 吗?

我能想到的最接近的例子是购物车。您有待售物品,并且您有一个购物车(装备清单)。您将商品添加到购物车,然后购买购物车(将其分配给旅行)。

【问题讨论】:

    标签: php cakephp relationships


    【解决方案1】:

    在一条记录上存储同一张表的多个外键通常是错误的做法。

    对我来说,听起来您正在寻找多对多关系,即hasAndBelongsToMany 关联,其中GearList HABTM GearItem 反之亦然(如果您希望GearItem::find() 返回关联的GearList 记录)。

    关联存储在单独的连接表中,这样GearItem 可以分配给许多不同的GearList,而GearList 可以有许多不同的GearItem

    另见Saving Related Model Data (HABTM)

    【讨论】:

    • 您是否在两个模型中都声明了这种关系?我找到了关于如何构建连接表的信息,所以当我将新的 GearItem 添加到 GearList 时,我会将其写入 gearitems_gearlists 表(连接表)吗?最后,似乎我需要 GearList 表中的 GearItem 外键,反之亦然。如果它可以有多个齿轮列表,这怎么可能?
    • 如果您希望GearItem::find() 包含关联的GearLists,那么是的,为两个模型定义它。写入连接表由 CakePHP 自动完成,请参阅 Saving Related Model Data (HABTM)
    • @BobHaskett 不,GearItemGearList 的表中不需要外键,这一切都发生在连接表中,其中每条记录将代表 @987654335 之间的关联@ 和 GearList
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多