是否可以在Fuelphp上使用ORM自定义选择字段?

时间:2012-10-05 03:06:44

标签: php orm fuelphp

当我想使用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或title字段。

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

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

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

参考

  1. ORM Discussion FuelPHP据说ORM目前将选择所有列,目前没有计划改变它。
  2. 我的问题

    1. 使用ORM选择自定义字段,例如select id,owner from article where id = 4,它将只返回id&所有者,可以在FUELPHP上使用ORM获得吗?

4 个答案:

答案 0 :(得分:3)

不要使用

Model_Article::find()->

但请使用

Model_Article::query()->

第一个可以工作但被认为是错误情况,可能会在将来的版本中发生变化。

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

如果您正在尝试查找结果,例如查询“select * from article where id = 4”

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

print_r($article);

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

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

答案 3 :(得分:0)

Fuelphp已发布新版本,你可以看到这个文档,在我的情况下,fuelphp版本是1.2并且无法使用orm选择自定义字段。

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

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')));