您缺少使用 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 的所有用户详细信息和消息详细信息。现在这是半简单的情况,因为我假设一条消息只能来自一个用户。
另一方面,对于 to 字段,我假设您应该使用关系表。要为它使用 DM,您必须将表命名为类似users_messages
但再次为什么需要使用 DM,因为它真的是矫枉过正。
现在对于 from 字段,您有一个多对多关系,因为一条消息可以有很多用户,而一个用户可以有很多他们发送的消息。
所以创建一个这样的表
CREATE TABLE message_to (
user_id BIGINT UNSIGNED NOT NULL,
message_to_id BIGING UNSIGNED NOT NULL,
PRIMARY KEY (user_id, message_to_id),
);
如果您想正确执行此操作,您还将使用外键,但这取决于您的数据库
现在您可以非常轻松地查询并获取消息发送给的所有用户。
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,并且您需要学习它们的语法。