当我想使用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不是和另一个字段,我不知道为什么?
参考
我的问题
select id,owner from article where id = 4
,它将只返回id&所有者,可以在FUELPHP上使用ORM获得吗?答案 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')));