【问题标题】:How do I use CI4 "model" class methods to return the contents of a list of selected fields from a table?如何使用 CI4“模型”类方法从表中返回选定字段列表的内容?
【发布时间】:2021-08-28 14:26:35
【问题描述】:

CodeIgniter4 提供了一个新的 Model 类,它有助于消除几个典型的 CRUD 编码要求。我可以使用内置的“查询生成器”工具集,但我想学习使用新的 CI4 模型方法。但是,我看不到如何简单地从记录集中返回一组选定的列。 "$data = $model->findColumn('columnName')" 方法只选择单个列。我尝试使用列名数组作为参数 - 几乎所有其他 CI4 类都可以识别 - 但这会产生错误:

“传递给 CodeIgniter\BaseModel::findColumn() 的参数 1 必须是字符串类型,给定数组。”。

    $data = $model->findColumn(['title', 'content'])->where('memID', $memID);

我也看不到“链接”findColumn() 方法的方法,无论如何这感觉就像一个黑客。我在这里错过了什么?

【问题讨论】:

    标签: mysql database codeigniter-4


    【解决方案1】:

    在多次重新阅读 CI4 文档后,我现在看到内置的 Model 类方法,如 find(),仅用于非常基本的查询,以及设置将在每个实例中使用的参数类,如表名。此外,如果您有一个非常简单的查询,您的模型将不需要加载应该提供一些速度优势的 Query Builder 类。

    但模型类中内置的那些方法不支持,例如,选择数据库中可用列的子集。

    因此,Query Builder 类方法不能替代 CI4 模型的内置方法。相反,它们可用于大多数典型查询。

    阅读 CI4 文档让我相信模型类的基本方法,如 find() 或 findAll(),与查询构建器方法是分开的,必须单独调用。我现在看到查询构建器方法可用于我创建的任何模型对象 - 并且可以在同一个查询中一起使用,例如:

        $data = $model->select('title, text')->where('memID', $memID)->findAll();
    

    如果我的结论不正确,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 2013-11-20
      • 2017-05-17
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      相关资源
      最近更新 更多