在 CodeIgniter 中使用模型

2024-04-16

有人可以向我解释什么时候在 CI 中使用模型是一个好的实践吗? 维基百科上的一篇文章将 CI 模型称为“完全可选且很少需要”,这是真的吗?


假设您需要调用一个名为get_user_info从数据库检索用户信息。你可以有这样的函数:

class Home extends Controller {

    function __construct() {
        parent::__construct();
    }

    function index() {
        $user = $this->get_user_info($_SESSION['user_id']);
        echo "Hello " . $user['first_name'];
    }

    function get_user_info($user_id) {
        $query = $this->db->query("SELECT * FROM users WHERE user_id = ?", array($user_id));
        return $query->row_array();
    }
}

但是,如果您需要打电话怎么办?get_user_info在另一页上?

在这种情况下,您必须将函数复制并粘贴到每个页面中,如果您有很多页面,则很难维护(如果您需要将查询更改为 JOIN 到另一个表上怎么办?)

这也违背了不要重复自己 http://en.wikipedia.org/wiki/Don%27t_repeat_yourself原则。

模型旨在处理所有数据逻辑和表示,返回已加载到视图中的数据。最常见的是,它们用作将数据库功能分组在一起的一种方式,使您可以更轻松地更改它们,而无需修改所有控制器。

class User extends Model {

    function __construct() {
        parent::Model();
    }

    function get_user_info($user_id) {
        $query = $this->db->query("SELECT * FROM users WHERE user_id = ?", array($user_id));
        return $query->row_array();
    }

}

在上面我们现在创建了一个名为user。在我们的家庭控制器中,我们现在可以将代码更改为:

class Home extends Controller {

    function __construct() {
        parent::__construct();
    }

    function index() {
        $this->load->model('user');
        $user = $this->user->get_user_info($_SESSION['user_id']);
        echo "Hello " . $user['first_name'];
    }
}

现在你可以改变你的get_user_info功能,而无需更改 X 个依赖相同功能的控制器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 CodeIgniter 中使用模型 的相关文章

  • 根据用户投票移动 div

    我是新来的 但我喜欢这个网站 我检查了其他类似的问题 但没有看到我要找的东西 我是一名音乐家 有一段时间我一直在做 每日之歌 每天写一首小歌 我想将歌曲发布为 div 在里面 li 在 div 中 我只想要一个简单的 mp3 播放器和一个
  • 总小时数无法从 Android 插入 MySQL

    我使用以下公式获得总小时数 public void updateTotalHours int a SplitTime objMyCustomBaseAdapter getFistTime int b SplitTime objMyCusto
  • 将数据从 jQuery 传递到 PHP 以进行 ajax post

    你好 我是一个使用 jQuery 和 Ajax 的新手 我正在尝试使用 Jquery POST 方法将数据提交到服务器 我传递的数据是一个字符串 现在我无法理解如何传递数据以及如何检索数据 我尝试搜索有关我的问题的文章 但没有找到 我相信我
  • XPath 直到下一个标签

    与之前在这里问过的其他人类似的问题 但由于我不知道如何应用这些建议 所以我需要一些帮助 我想找到一个 html 文档的节点 其结构如下 摘录 可能有所不同 h2 My title 1 h2 h3 Sub heading h3 p span
  • 从 WordPress 搜索结果页面获取类别名称

    在特定博客类别中进行搜索查询 重定向到 WP BLOG 主页面 后 我的搜索 URL 如下所示 online shop s category new posts category post type post 不幸的是 我无法在搜索结果页面
  • 使用 Curl 登录 meetup.com

    我正在尝试自动登录 www meetup com 但没有成功 这是我的代码
  • 来自同一数组的引用键

    我试图引用同一数组中项目的键 值对 glossary args array name gt Glossary Terms singular name gt Glossary Term add new gt Add New Term edit
  • YOUTUBE API:检索视频关键字

    最近 YouTube 决定仅向经过身份验证的开发者输出视频关键字 我注册了开发者密钥 我试图获取一个我将解析的 XML 通过请求 https gdata youtube com feeds api videos COwIYbYQUrQ ke
  • Laravel 4 - 工匠错误 SQLSTATE[42000]

    我正在尝试为我的用户表创建一个新的迁移 我有以下架构 Schema create users function t t gt increments id t gt string username 16 t gt string passwor
  • 如何使PHP库松耦合? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 php5-geoip 和 Maxmind 数据库获取 IPv6 支持

    我按照这些相同的步骤进行了 geoip 设置 http php net manual en geoip setup php http php net manual en geoip setup php wget http geolite m
  • 如何在 PHP 的 GD 库中为文本添加发光或阴影? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 是否可以在 GD 中为文本添加发光或
  • 服务器重新启动时显示等待页面

    我有一个服务器并为其创建一个 Web 界面 如果用户按下页面上的重新启动按钮 则用户将被重定向到reboot php他应该看到一个旋转 gif 直到服务器再次可访问并且服务器通过 shell 执行重新启动 如果服务器可以访问 那么我需要重定
  • 解释一下 $CI =& get_instance();

    查看codeigniter的源代码 在它的辅助函数中我不断看到代码 CI get instance 谁能向我解释一下这段代码是如何工作的 我知道它正在返回对 CI 超级对象的引用 但是在哪里get instance 来自 这基本上是一个单例
  • 尝试使用 fopen() 将文件写入不同的目录

    我正在尝试将文件从一个目录写入另一个目录 例如 http www xxxxxxx com admin upload php http www xxxxxxx com admin upload php to http www xxxxxxx
  • /etc/php5/conf.d 文件夹中的 .ini 文件有什么用?

    我知道 ini 文件位于 etc php5 cli与 PHP 的 CLI 使用有关 文件位于 etc php5 fpm是关于 PHP 的 FastCGI FPM 方面 但是位于以下位置的 ini 文件又如何呢 etc php5 conf d
  • 针对 Woocommerce 中多个产品类别计数的 ajax 添加到购物车的 JS 警报

    在 Woocommerce 中 当达到特定产品类别的购物车中的产品的特定数量时 我尝试显示 JavaScript 甜蜜警报 并在达到二级类别的产品的特定数量时显示另一个警报 商品通过 AJAX 添加到购物车 这就是我想使用 JavaScri
  • 在 Laravel 中使用 PUT/DELETE 有什么价值?

    用于将路由定义为资源Route resource 文档表明 Verb Path Action Route Name GET resource index resource index GET resource create create r
  • 发送 QUERY 数据包时出错。 PID=9565

    我有两个不同的环境开发和生活几乎都是相同的 但上述 标题中 警告仅在开发模式下发生 在此警告之前 我还收到错误消息 允许的内存大小 268435456 字节已耗尽 这仅发生在开发模式下 使用 PHP 版本 5 6 和 mysql 不是 my
  • 现实世界抽象类使用简单示例

    有没有使用抽象类的现实世界简单示例 我试图进入 PHP 的 OOP 但我仍然无法理解 为什么应该使用抽象类以及何时使用 是的 我知道不可能创建抽象类实例 只能创建继承它的类的实例 也许您有一个图像类 并且有 2 个驱动程序 GD 和 Ima

随机推荐

  • 打印 JTextField 在控制台上显示空白

    我是Java新手 刚刚尝试了Java的swing 我尝试制作一个登录表单 将JTextField的内容打印到控制台 但是当我尝试它时 控制台没有显示任何内容 这是我的代码 import java awt EventQueue import
  • 如何在角度中对取消订阅功能进行单元测试

    我想找到一种方法来测试订阅和主题上的取消订阅函数调用 我想出了一些可能的解决方案 但每一种都有优点和缺点 请记住 我不想出于测试目的而更改变量的访问修饰符 通过反射访问组件的私有变量 在这种情况下 我有一个存储订阅的私有类变量 组件 ts
  • 将 DIV 包裹在 Anchor 标签或其他标签内

    假设我有一个可点击的复合体div链接到另一个页面的元素结构如下 这就是当前通过点击实现的事情 单击 css 活动状态 更改内部背景颜色 a 标记并重定向到其他页面 我想知道这是否符合 HTML5 验证 或者与用div并使用 JavaScri
  • 如何防止 UINavigationBar 在 iOS 7 中覆盖视图顶部?

    更新到 Xcode 5 后 我的所有应用程序视图中的导航栏都下移了 以下是一些屏幕截图 第一个显示了视图中拉下时的所有内容 第二个显示了所有未受影响的内容 搜索栏应从导航栏开始 有人知道我该如何解决这个问题吗 编辑 我之前尝试过这个建议 i
  • java 应用程序冻结 mac os 10.9 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要帮助 我有 mac os 10 9 并安装了 java JDK 1 7 java 版本 java版本 1 7 0 45 Java T
  • (Django) 事件日历的最佳解决方案

    我需要向我的应用程序添加事件日历功能 我想知道您认为最好的方法是什么 是否有任何有趣的项目提供所需的功能 一个片段 http djangosnippets org snippets 129 http djangosnippets org s
  • 在 Perl 中通过索引从数组中排除元素的最佳方法是什么?

    我使用以下代码来排除中的元素 x 在索引处 index 但我不确定这是实现此功能的最有效方法 大家有什么更好的办法吗 sub arrayexclude my x shift my index shift my keep index 0 sc
  • searchkick 不返回带有空格的结果

    所以我有这个 searchckick 方法 search options misspellings edit distance 2 fields eventname date city order score desc date asc e
  • 如何在 Python 中将输入打印为整数、浮点数或字符串

    我的代码的目的是让输出给出输入的数字和类型 例如 如果输入是 10 输出应该是 10 is an integer 如果输入是 10 0 输出应该是 10 0 is a float 如果输入是 Ten 输出应该是 Ten is a strin
  • 具有可变数量参数的 Python itertools.product

    我正在尝试编写一个模块来使用 itertools product 组合可变数量的列表 我能得到的最接近的是 import itertools lists item1 item2 A b C etc searchterms list iter
  • 使用 new 隐藏方法的用例

    这或多或少是一个完全相同的副本这个帖子 https stackoverflow com questions 3117838 why do we need the new keyword and why is the default beha
  • ReactJS:类型错误:this.state.data.map 不是函数

    有人可以帮我解决这个问题吗 我收到此问题标题中描述的错误 我想将 JSON 数据放入react grid layout 组件中 该库可以在 https github com STRML react grid layout https git
  • MS Azure - 错误请求 400

    每次运行这行代码时 我都会收到错误的请求错误 List
  • Glide v4 中的占位符/错误/后备 [重复]

    这个问题在这里已经有答案了 我现在使用的是最新版本的 Glide滑行 4 0 0 RC1并且无法找到占位符 错误 后备等方法 也许他们已经提供了替代方案 但我没有得到它 有人知道这个版本中有替代方案吗 try this RequestOpt
  • “PHP 致命错误:未找到类‘HttpRequest’”

    我一直在尝试以多种方式解决这个问题 阅读了很多帖子 但仍然没有运气 我在 Mac OSX 10 7 Lion 上工作 并且正在使用 MAMP 为 WordPress 站点 php 文件 编写一个插件 并且在某一时刻我必须发出 HTTP 请求
  • 是否有任何正式的方法或已知的方法来规范化 xml 文件以生成差异?

    似乎有很多关于 WRT 工具在 xml 之间生成差异的问题 但还没有这个问题 所以任何知道这个问题的人都会向我展示一个链接或粘贴任何人已经解决了这个问题的示例 规范化 xml 文件意味着 重新排序属性的外观 重新排序标签的外观 可通过命令行
  • 使用内部联接编写用 SQL 编写的继承查询?

    我承认我的 SQL 知识 使用 mySQL 几乎没有超出数据库管理所需的标准查询 并且我的大部分数据操作都是通过 php 完成的 我一直渴望改变这一点 并且到目前为止已经取得了成功 如果有人能建议我如何在包含 父 子 字段 内部字段的标准表
  • Xamarin Studio 中的目标平台被禁用?

    When creating a new project the target platform Android is already greyed out so can t proceed 我已经链接了SDK和NDK 如果您未安装 Xama
  • 这段 Python 代码是否容易受到 SQL 注入攻击? (SQLite3)

    正如标题所示 我想知道这段代码是否容易受到 SQL 注入攻击 如果是这样 是否有更好 更安全的方法来实现同样的目标 def add table args statement INSERT INTO s VALUES s table args
  • 在 CodeIgniter 中使用模型

    有人可以向我解释什么时候在 CI 中使用模型是一个好的实践吗 维基百科上的一篇文章将 CI 模型称为 完全可选且很少需要 这是真的吗 假设您需要调用一个名为get user info从数据库检索用户信息 你可以有这样的函数 class Ho