加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 用于Codeigniter关系的DataMapper ORM

发布时间:2020-12-13 17:07:01 所属栏目:PHP教程 来源:网络整理
导读:我有一张桌子…… 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 D
我有一张桌子……

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,你需要学习它们的语法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读