我正在使用DBIx::Class并且我有一个这样的查询:

$groups = $c->model('DB::Project')->search(
{ "sessions.user_id"=>$c->user->id,done_yn=>'y' },
{
    select   => ["name", "id",\'SUM(UNIX_TIMESTAMP(end_time)-UNIX_TIMESTAMP(start_time)) as total_time'], #\''
    join         => 'sessions',
  }
);

我希望能够得到SUM(UNIX_TIMESTAMP(end_time)-UNIX_TIMESTAMP(start_time))的值,但由于这不是表中的实际列,因此引用DBIx::Class::Row对象的总时间似乎不起作用。有人知道我如何得到这些临时列吗?谢谢!

最佳答案

select docs完美地描述了如何实现你想要实现的目标。
建议尽可能避免使用文本sql,可以使用{ sum => \'UNIX_TIMESTAMP(end_time)-UNIX_TIMESTAMP(start_time)' }
文字SQL中的“as”不需要为列命名,您必须使用as search属性或更好的列快捷方式,而不是select+as。

10-08 16:11