我尝试了这两种方法却失败了......
在Model Orm中选择MAX或COUNT是不可能的吗?
(我必须使用Model_Orm,而不是CRUD或DB)
Model_Foo::query()
->select('MAX("time") AS recent')
->group_by("user_id")
->get();
结果:
Fuel\Core\Database_Exception [ 42000 ]:
SQLSTATE[42000]: Syntax error or access violation:
1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '`) as recent` AS `t0_c0`
Model_Foo::query()
->select(DB::expr('MAX("time") AS recent'))
->group_by("user_id")
->get();
结果:
Fuel\Core\PhpErrorException [ Warning ]:
Illegal offset type
答案 0 :(得分:1)
这里简单的答案是你没有。在理想的世界中,您不应该使用模型属性的子集,也不应“动态”创建新的属性,因为它会破坏ORM提供的抽象。
最简单的方法是为模型添加一个额外的方法,例如public static function getMaxTime()
使用DB
类来构造查询以返回所需的数据。
为了使其与ORM的表名发现保持一致,您可以使用Model::table()
从模型中获取表的名称,并将其传递给DB
查询。
$query = DB::select(/** Enter "MAX" here */)
->from(static::table())
// More stuff here
答案 1 :(得分:0)
您是否考虑过 - > as_object方法? 我注意到你没有指定DB ::方法,但由于循环将返回Orm \ Model, 我认为这可能是一个不错的解决方案。
$dataset = Db::select(DB::expr('MAX(time) AS recent, user_id'))
->from('table')
->group_by('user_id')
->as_object('Model_Foo')
->execute();
foreach($dataset as $m) {
print ($m->get('recent').' '.$m->get('user_id'));
}
您可以使用最大功能
$time_string = Model_Foo::query()->max('time');
它将直接返回值(不在数组或模型中)
来自fuelphp docs的参考: http://fuelphp.com/docs/packages/orm/crud.html