在DBIx :: Class中,当我使用以下语法生成查询时:
...
'Time(submitted_at)' => { '>' => 'Time(Now()-Interval ' . $wait_period . ' minute)' }
...
Run Code Online (Sandbox Code Playgroud)
除了右侧的函数在引号中之外,生成的查询是完美的.
... AND ( Time(submitted_at) > 'Time(Now()-Interval 5 minute)' ) ...
Run Code Online (Sandbox Code Playgroud)
如果没有引用那么它就是正确的.我该怎么办?
谢谢,罗布
给出两个表:(表示关键问题的传入大大减少/简化的示例)
app_data表示可以订阅的应用程序
id app_name
1 apple
2 berry
3 cherry
Run Code Online (Sandbox Code Playgroud)
app_sub将电子邮件地址映射到应用程序
id email
1 alex
2 bob
2 coby
Run Code Online (Sandbox Code Playgroud)
我想从单用户的角度生成一个表,显示当前用户订阅的应用程序,而不是.
例如,从Alex的角度来看,我想得到:
desired_table
id app_name is_subscribed
1 apple true
2 berry false
3 cherry false
Run Code Online (Sandbox Code Playgroud)
以下纯SQL查询似乎没问题:
select id, app_name, email
from app_data left join ( select *
from app_sub
where email='alex'
) as subquery
on app_name.id=app_data.id;
Run Code Online (Sandbox Code Playgroud)
但是我很难在dbix-class中工作.
或者,我试图消除子查询,如下所示:
$app_data_resultset->search( { -or => [ { email => 'alex' },
{ email => undef },
],
},
{ select => [ …Run Code Online (Sandbox Code Playgroud) 我有一堆由dbicdump / DBIx::Class::Schema::Loader从我的数据库模式创建的 DBIx::Class Result 类
我需要向is_deleted其中一个表添加一个布尔列,并过滤掉所有现有搜索和联接中已删除的记录。
不幸的是,在庞大的 perl 应用程序中有 30 或 40 个直接使用相关表的地方,并且至少有相同数量的通过prefetch或join属性加入它的地方search()。手动更改它们是可能的,但非常耗时。
有没有办法向来自或来自特定表的WHERE所有查询添加默认子句?SELECTJOIN
我正在通过某种方式能够调用resultset('MyTable')->search({},{})并WHERE is_deleted = 0添加到所有查询中。加上is_deleted = 0使用时应用相同的过滤器prefetch => [qw(my_table)],。
我在SQLite数据库中有一个表,其中一列以epoch秒存储文件mtimes.
我现在想搜索在某个月内修改过的表格文件?
在原始SQL中我会这样做:
select * from my_table where strftime('%Y-%m', mtime, "unixepoch") = "2009-08"
Run Code Online (Sandbox Code Playgroud)
有没有办法通过DBIx :: Class有效地做到这一点?有可能吗?
$m->search({ \'strftime('%Y-%m', mtime, "unixepoch")' => "2009-08" })
Run Code Online (Sandbox Code Playgroud)
我试过了解DBIx :: Class :: InflateColumn :: DateTime是否有办法,但我没有找到它.
谢谢
西蒙娜
我最近一直在构建Catalyst应用程序,我喜欢使用Catalyst的创建脚本来轻松生成DBIx :: Class的表模式.我希望能够使用DBIX :: Class而无需手动为我的表编写模式.有没有办法这样做而不用手工做?谢谢!
我想用一个DBIx ResultSet的帮手,也就是DBIx::Class::Helper::ResultSet::Random,在我催化剂的应用.
包文档显示了它是如何从DBIx::Class::ResultSet类中加载的,但据我所知,我没有这些,因为我正在使用它DBIx::Class::Schema::Loader来创建模式.
我试过把它__PACKAGE__->load_components('Helper::ResultSet::Random')放在我的Schema::Result,但是没有用:无法通过包"DBIx :: Class :: ResultSet"找到对象方法"rand".
应该怎么做?
他们在评论中说,DBIx::Class可以在不加载所有表格的情况下使用.
如何在DBIx::Class不加载所有表的情况下使用?(出于性能原因,我需要这个.)