【问题标题】:Alternatives to store array with CakePHP+MySQL使用 CakePHP+MySQL 存储数组的替代方案
【发布时间】:2011-06-20 00:04:42
【问题描述】:

我正在开发一个网站,用户可以在其中将项目列表(数组)保存在他们的个人资料中(他们也可以在同一网站上找到并拥有自己的 ID)。

这是我迄今为止在类似情况下使用的方式: - 在数据库的用户表中创建一个“文本”(字符串)字段并保存以逗号分隔的项目 - 要读取该字段,请使用 explode 方法在 CakePHP 中获取数组,然后使用它 - 要将数组保存到数据库,请使用 implode 方法将其转换为字符串并能够将其存储在字段中

我不喜欢这种方法的地方在于,处理这些列表(添加项目、删除项目...)可能会变得非常复杂,而且您不能真正直接访问这些项目,总有一些预处理或进行后处理。

例如,为了更轻松地查看一个用户列表中的特定项目,并在他们的列表中找到具有相同项目的其他用户。

在 CakePHP+MySQL 中有没有更好的处理数组的方法?我读过serialize()/unserialize(),但我认为与其他方法相比不会有太大的不同...

非常感谢您的任何想法!

【问题讨论】:

    标签: mysql arrays cakephp


    【解决方案1】:

    一定要使用表格,按照 Kristian Antonsen 的建议,创建一个 items 表,然后在你的 User 模型中创建一个 hasManu 关系,如下所示:

    class User extends AppModel{
        $hasMany = array(
             'Item'
        );
    }
    

    或HABTM关系:

    class User extends AppModel{
        $hasAndBelongsToMany = array(
             'Item'
        );
    }
    

    使用表单助手为项目创建输入。

    希望这会有所帮助。

    【讨论】:

    • 感谢 Matt 给 cakePHP “触摸”他的回答,我会试试的!
    【解决方案2】:

    数据库表只是一个巨大的电子表格。但是,不是在每个单元格中存储一条信息,而是将它们全部聚集在一个单元格中。你永远不会在电子表格中这样做。

    你应该像这样创建一个项目表:

    +----+--------+--------+
    | ID | UserID | ItemID |
    +----+--------+--------+
    | 1  | 2      | 3      |
    | 2  | 2      | 1      |
    | 3  | 3      | 3      |
    +----+--------+--------+
    

    可能还有另一张桌子:

    +----+-------------+
    | ID | ItemName    |
    +----+-------------+
    | 1  | Mathematics |
    | 2  | Jogging     |
    | 3  | Movies      |
    +----+-------------+
    

    这会让您知道用户 2 喜欢电影和数学,而用户 3 喜欢电影。

    【讨论】:

    • 谢谢克里斯蒂安,我去看看!
    猜你喜欢
    • 2012-12-09
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2023-04-04
    • 2012-03-12
    • 2021-09-28
    相关资源
    最近更新 更多