php – 用于Codeigniter关系的DataMapper ORM

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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,你需要学习它们的语法.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 用于Codeigniter关系的DataMapper ORM全部内容,希望文章能够帮你解决php – 用于Codeigniter关系的DataMapper ORM所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。