php – 用于Codeigniter关系的DataMapper ORM
我有一张桌子……
CREATE TABLE IF NOT EXISTS `messages` ( `id` int(11) NOT NULL AUTO_INCREMENT,`to` int(11) NOT NULL,`from` int(11) NOT NULL,`subject` varchar(50) NOT NULL,`message` varchar(1000) NOT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; To和From是Users Table的主键ID. 当我使用CodeIgniter DataMapper获取每条消息时,如何获取用户详细信息. 解决方法
您缺少使用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,你需要学习它们的语法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |