0

当我想使用 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 讨论 FuelPHP据说 ORM 目前将选择所有列,目前没有计划改变它。

我的问题

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

4 回答 4

3

不使用

Model_Article::find()->

但使用

Model_Article::query()->

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

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

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

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

于 2012-10-31T19:47:59.947 回答
2

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

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

DB::select('id','title')->from(Model_Article::table())->where('id', 4);
于 2012-10-12T09:33:33.920 回答
0

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

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

print_r($article);

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

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

于 2012-10-12T07:38:51.650 回答
0

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')));
于 2013-01-30T10:32:34.523 回答