您错过了使用DataMapper for CodeIgniter的几个要点。首先,你需要做一些非常简单而重要的事情。 DataMapper(DM)使用规范化的数据库命名来查找关系。这意味着如果你查询你的数据库。现在,对于两列使用DM有点困难,我认为你真的不需要它。
首先,如果你不使用你的DM真的只需要两个查询
SELECT u.*, m.* FROM messages AS m, users AS u WHERE m.from = u.id AND m.id = SOME_ID.
此查询将让你所有的用户信息和邮件详情某些消息ID。 现在这是半简单的情况,因为我假设一条消息只能来自一个用户。
对于字段另一方面,我会假设你应该使用关系表。要使用DM为它,你必须命名表如users_messages
,但为什么你需要使用DM时,它真的是矫枉过正。
现在对于从外地来说,你有多对多的关系,因为一条消息可以有很多用户,并且用户可以有很多他们发送的消息。
因此,创建一个表像这样
CREATE TABLE message_to (
user_id BIGINT UNSIGNED NOT NULL,
message_to_id BIGING UNSIGNED NOT NULL,
PRIMARY KEY (user_id, message_to_id),
);
如果你想这样做的权利,你也将使用外键,但是这取决于你的DB
现在,您可以查询真正轻松获得所有的用户发送了一条消息。
SELECT u.*, m.* FROM users AS u, m AS messages JOIN messages_to AS m_t ON (u.id = m_t.user_id)
而查询其他方式同样简单,获取用户发送的所有消息。
请记住,只是因为像DM这样的工具并不意味着它是工作的最佳工具,实际上在这种情况下使用DM会导致相当不错的开销。
这样做与DM需要相同的东西,你不能命名你的表/列,因为你认为合适,你需要一个类为每个表创建它与其他表的关系。
含义你有很多额外的工作使用DM,你需要学习他们的语法。
我一直在使用DM,而现在我刚开始觉得它的方式不仅仅是帮助。有时候它很棒,但是有很多次它确实需要更多的代码,更多的文件和更多的查询,并且支持不一定是最优的命名约定。可能是因为我没有以最佳方式使用它。 – 2011-05-04 15:22:24