【问题标题】:Is Possible Custom Select Field using ORM on Fuelphp?是否可以在 Fuelphp 上使用 ORM 自定义选择字段?
【发布时间】:2012-10-05 03:06:44
【问题描述】:

当我想使用 ORM 查询表时遇到问题,例如我有带有字段 id、作者、文本的文章表。

我的代码是这样的:

// Single where
$article = Model_Article::find()->where('id', 4);
print_r($article);

该代码不会获取表格文章上的所有字段,就像select * from article where id = 4

尝试可能性

$article = Model_Article::find(null, array('id','title'))->where('id', 3);

反应是

object(Orm\Query)#89 (14) {
  ["model":protected]=>
  string(10) "Model_Article"
  ["connection":protected]=>
  NULL
  ["view":protected]=>
  NULL
  ["alias":protected]=>
  string(2) "t0"
  ["relations":protected]=>
  array(0) {
  }
  ["joins":protected]=>
  array(0) {
  }
  ["select":protected]=>
  array(1) {
    ["t0_c0"]=>
    string(5) "t0.id"
  }
  ["limit":protected]=>
  NULL
  ["offset":protected]=>
  NULL
  ["rows_limit":protected]=>
  NULL
  ["rows_offset":protected]=>
  NULL
  ["where":protected]=>
  array(1) {
    [0]=>
    array(2) {
      [0]=>
      string(9) "and_where"
      [1]=>
      array(3) {
        [0]=>
        string(5) "t0.id"
        [1]=>
        string(1) "="
        [2]=>
        int(3)
      }
    }
  }
  ["order_by":protected]=>
  array(0) {
  }
  ["values":protected]=>
  array(0) {
  }
}

那不是返回 id 或标题字段。

但是当我尝试添加 get_one() 方法时

$article = Model_Article::find(null, array('id','title'))->where('id', 3)->get_one();

id 是 return ,但 title 不是,另外一个字段,我不知道为什么?

参考

  1. ORM Discussion FuelPHP 据说 ORM 目前将选择所有列,目前没有计划更改。

我的问题

  1. 使用像这样select id,owner from article where id = 4 的 ORM 选择自定义字段,它将只返回 id 和所有者,是否可以在 FUELPHP 上使用 ORM 来获得它?

【问题讨论】:

  • 我现在不在家,所以试试这个并交叉手指 ;-) : $article = Model_Article::find(null, array('id', 'owner'))->其中('id',4);阅读框架的代码这应该可以工作,让我知道,这样我就可以为此写一个答案。
  • 在尝试您的建议后我会更新我的问题...:)

标签: php orm fuelphp


【解决方案1】:

不要使用

Model_Article::find()->

但使用

Model_Article::query()->

第一个有效,但被认为是错误情况,可能会在未来的版本中发生变化。

从 1.4 版开始,ORM 支持部分选择,使用

Model::query()->select('id', 'value')->

find() 的第二个参数是查找条件的数组,例如 'where' 或 'order_by' 子句。不支持在此数组中选择列名。

【讨论】:

    【解决方案2】:

    Orm\Model 获取所有列,因为它无法处理不完整/部分对象。

    如果您想要自定义查询,请不要使用 ORM,请使用查询构建器。

    DB::select('id','title')->from(Model_Article::table())->where('id', 4);
    

    【讨论】:

    • 感谢您的建议,我认为您的建议是这样...:)
    • 但这仍然不能解决我的问题,我更喜欢使用直接查询,因为我可以自定义我的查询...
    • 查询生成器的语法与 Orm\Query 类几乎相同。您应该能够以同样的方式自定义您的查询。
    • 我正在修订 Fuelphp 已经发布了新版本,并且从 1.4 版本开始支持使用 orm 选择自定义字段 ...
    【解决方案3】:

    如果您试图找出类似查询“select * from article where id = 4”的结果

    $article = Model_Article::find()->where('id', 4)->get_one();
    
    print_r($article);
    

    还有一个你应该理解的概念 get_one() 仅返回一条记录(作为对象)。 get() 返回多条记录(以对象数组的形式)。

    如果您的字段未显示,请检查模型 Model_Article 。当您没有在属性列表中声明字段时,可能会出现此问题。

    【讨论】:

      【解决方案4】:

      Fuelphp 已经发布了新版本,你可以看看这个文档,在我的例子中,fuelphp 版本是 1.2 并且不能使用 orm 选择自定义字段。

      使用 orm 选择自定义字段从 1.4 版本开始提供

      http://fuelphp.com/docs/packages/orm/crud.html

      // Find only some columns
      Model_Article::query()->select('id', 'name');
      Model_Article::find('all', array('select' => array('id', 'name')));
      

      【讨论】:

        猜你喜欢
        • 2015-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多