问题标签 [dbix-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - DBIx::Class - 将只读合成列(由 SQL 定义)添加到结果类?
是否可以将“合成”列添加到 DBIx::Class 结果类?合成列的值将由当前行的 SQL 表达式定义。例如,如果一行有 和 列first
,last
我可以合成一个新的只读列,其定义为 \"me.first || ' ' || me.last"
(这是 Oracle SQL 语法)。
DBIx::Class 文档中的“COMPUTED COLUMNS”下列出了接近我想要的内容。但是,在这种情况下,该列似乎已在数据库端定义。我的合成列不在表模式中。
如果做不到这一点,是否可以SELECT
在搜索结果集时将我的 SQL 表达式添加到生成的语句中?
(上面的示例 SQL 具有误导性——我需要执行一个涉及数据库函数的 SQL 表达式,所以我不能只在 perl 中实现它。)
sql - 加入带有 dbix-class 的子查询?
给定两个表:(显示关键问题的大大简化/简化的示例)
app_data表示可以订阅的应用程序
app_sub将电子邮件地址映射到应用程序
我想从单用户的角度生成一个表,显示当前用户订阅了哪些应用程序,而不是。
例如,从亚历克斯的角度来看,我想得到:
期望表
以下纯 SQL 查询似乎没问题:
但是,我很难让它在 dbix-class 中工作。
或者,我尝试像这样消除子查询:
但是,这(现在可以预期)会导致以下结果(在将 0 和 null 都视为 false 之后):
坏表
由于 'bob' 和 'coby' 订阅了 id 2,因此 where 子句完全消除了第二个 id。
任何帮助将不胜感激!
postgresql - 使用 Postgres 在 DBIx::Class 中按查询禁用准备好的语句
在 Postgres 中使用准备好的语句时,我有一些查询要慢得多(这是一个已知问题,请参阅http://www.postgresql.org/docs/current/static/sql-prepare.html)。因此,我想关闭这些查询的语句准备。
在 DBIx::Class 中,我可以在连接到数据库时通过在 connect_info 中传递参数“pg_server_prepare => 0”来全局关闭准备好的语句。但我看不到如何为现有连接更改此设置。给定一个 DBIx::Class::Schema,我试过这个:
如果我在那个调用之后记录 connect_info,我会看到这个参数的新值,但是数据库驱动程序仍然使用准备好的语句。我也尝试断开连接并重新连接
但这也无济于事。
有任何想法吗?
sql - DBIx::Class 做联合吗?
除了使用视图并手动写出 SQL 之外,我还没有找到与DBIx::Class进行联合的方法。这对我来说似乎很奇怪。我觉得应该有某种方法可以将两个 ResultSet 合并,而不需要做很多额外的工作,因为集合加法和减法是 SQL 的核心部分。有没有更简单的方法来做工会?如果不是,为什么不呢?
perl - DBIx::Class - 这个关系在哪里被缓存?
我有一个 Order 实体和一个 Address 实体,在我的Schema::Result::Order
模块中我有一个简单的属于关系:
我使用以下代码运行此代码DBIC_TRACE=1
:
我只看到一个SELECT ... FROM ADDRESS ...
查询,所以显然第二种$order->address
方法没有命中数据库。
所以这可能是一个简单的问题,但是地址对象在哪里被缓存?(在$order
对象中?)
其次,这种缓存是否可配置(即我可以将 DBIC 配置为不缓存这些关系)吗?
sql - DBIx::Class :基于列表中存在值的结果集 order_by
我正在使用 DBIx::Class 并且我有一个 ResultSet。我喜欢重新排序 ResultSet。我喜欢根据值的固定列表(“伦敦”、“纽约”、“东京”)检查特定列“城市”如果在值列表中找到城市,我想将该结果移至顶部组。如果未找到 city,我喜欢将该结果移至 ResultSet 中的底部组。
sql - 根据另一个表对表进行排序
我有一张桌子A。
和表 B
我需要对表 A 进行排序。
排序顺序:
最终输出:
这需要转换为 DBIx::Class 查询。
我试过以下:
但是我在某个地方找不到 tableB.S 为“7”的结果。
谢谢。
sql - SQL 转换
我有一个正常工作的查询
p>现在有了左连接,我只能放置 1 个条件(A.id = B.id)。所以我必须把 B.country = 'USA' 部分放在其他地方。有什么解决方法吗?我可以使用子查询。
更新:我必须使用一个框架(DBIx::Class),我在 Schema 中定义了单个条件(Id 匹配),并且改变它并不简单。
perl - DBIx::Class find_or_create 错误 - 无法作为类方法获取数据
我有以下架构:
我尝试find_or_create
根据一些属性下订单,例如:
我得到了错误DBIx::Class::Row::get_column(): Can't fetch data as class method
现在,如果我从 中排除该status
列find_or_create
,它会按预期工作(但不是按需要 - 这就是我想在子句中添加更多列的原因)。
如果我在 中添加任何其他列find_or_create
,我会收到该错误。
有谁知道这是一个错误还是预期的行为,我如何find_or_create
根据更多的列值订购?
编辑:
看起来这不是一个错误 - 我没有new
以正确的方式覆盖该方法。
该new
方法必须是这样的:
经过“几个”小时的调试后,我设法解决了这个问题。
感谢所有花时间阅读并试图弄清楚为什么这不起作用的人。
perl - 将逻辑从 Template Toolkit 转移到 Catalyst
我认为我在 TT 模板中使用了太多的条件和计算。
我正在显示来自 DBIC 的项目结果集。对于每个项目,我需要使用检索到的值来计算事物,并且模板似乎不是正确的位置。
但在 Catalyst 中,它是来自 DBIC 的厚物体。
那么如何将逻辑移动到模型中呢?我必须为所有项目运行一个完整的循环并以某种方式更改对象吗?
问候:米格,