问题标签 [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.

0 投票
2 回答
923 浏览

perl - DBIx::Class - 将只读合成列(由 SQL 定义)添加到结果类?

是否可以将“合成”列添加到 DBIx::Class 结果类?合成列的值将由当前行的 SQL 表达式定义。例如,如果一行有 和 列firstlast我可以合成一个新的只读列,其定义为 \"me.first || ' ' || me.last"(这是 Oracle SQL 语法)。

DBIx::Class 文档中的“COMPUTED COLUMNS”下列出了接近我想要的内容。但是,在这种情况下,该列似乎已在数据库端定义。我的合成列不在表模式中。

如果做不到这一点,是否可以SELECT在搜索结果集时将我的 SQL 表达式添加到生成的语句中?

(上面的示例 SQL 具有误导性——我需要执行一个涉及数据库函数的 SQL 表达式,所以我不能只在 perl 中实现它。)

0 投票
2 回答
1903 浏览

sql - 加入带有 dbix-class 的子查询?

给定两个表:(显示关键问题的大大简化/简化的示例)

app_data表示可以订阅的应用程序

app_sub将电子邮件地址映射到应用程序

我想从单用户的角度生成一个表,显示当前用户订阅了哪些应用程序,而不是。

例如,从亚历克斯的角度来看,我想得到:

期望表

以下纯 SQL 查询似乎没问题:

但是,我很难让它在 dbix-class 中工作。

或者,我尝试像这样消除子查询:

但是,这(现在可以预期)会导致以下结果(在将 0 和 null 都视为 false 之后):

坏表

由于 'bob' 和 'coby' 订阅了 id 2,因此 where 子句完全消除了第二个 id。

任何帮助将不胜感激!

0 投票
1 回答
670 浏览

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,我会看到这个参数的新值,但是数据库驱动程序仍然使用准备好的语句。我也尝试断开连接并重新连接

但这也无济于事。

有任何想法吗?

0 投票
2 回答
1228 浏览

sql - DBIx::Class 做联合吗?

除了使用视图并手动写出 SQL 之外,我还没有找到与DBIx::Class进行联合的方法。这对我来说似乎很奇怪。我觉得应该有某种方法可以将两个 ResultSet 合并,而不需要做很多额外的工作,因为集合加法和减法是 SQL 的核心部分。有没有更简单的方法来做工会?如果不是,为什么不呢?

0 投票
2 回答
178 浏览

perl - DBIx::Class - 这个关系在哪里被缓存?

我有一个 Order 实体和一个 Address 实体,在我的Schema::Result::Order模块中我有一个简单的属于关系:

我使用以下代码运行此代码DBIC_TRACE=1

我只看到一个SELECT ... FROM ADDRESS ...查询,所以显然第二种$order->address方法没有命中数据库。

所以这可能是一个简单的问题,但是地址对象在哪里被缓存?(在$order对象中?)

其次,这种缓存是否可配置(即我可以将 DBIC 配置为缓存这些关系)吗?

0 投票
2 回答
357 浏览

sql - DBIx::Class :基于列表中存在值的结果集 order_by

我正在使用 DBIx::Class 并且我有一个 ResultSet。我喜欢重新排序 ResultSet。我喜欢根据值的固定列表(“伦敦”、“纽约”、“东京”)检查特定列“城市”如果在值列表中找到城市,我想将该结果移至顶部组。如果未找到 city,我喜欢将该结果移至 ResultSet 中的底部组。

0 投票
2 回答
181 浏览

sql - 根据另一个表对表进行排序

我有一张桌子A。

和表 B

我需要对表 A 进行排序。

排序顺序:

最终输出:

这需要转换为 DBIx::Class 查询。

我试过以下:

但是我在某个地方找不到 tableB.S 为“7”的结果。

谢谢。

0 投票
1 回答
142 浏览

sql - SQL 转换

我有一个正常工作的查询

p>

现在有了左连接,我只能放置 1 个条件(A.id = B.id)。所以我必须把 B.country = 'USA' 部分放在其他地方。有什么解决方法吗?我可以使用子查询。

更新:我必须使用一个框架(DBIx::Class),我在 Schema 中定义了单个条件(Id 匹配),并且改变它并不简单。

0 投票
0 回答
455 浏览

perl - DBIx::Class find_or_create 错误 - 无法作为类方法获取数据

我有以下架构:

我尝试find_or_create根据一些属性下订单,例如:

我得到了错误DBIx::Class::Row::get_column(): Can't fetch data as class method

现在,如果我从 中排除该statusfind_or_create,它会按预期工作(但不是按需要 - 这就是我想在子句中添加更多列的原因)。

如果我在 中添加任何其他列find_or_create,我会收到该错误。

有谁知道这是一个错误还是预期的行为,我如何find_or_create根据更多的列值订购?

编辑:

看起来这不是一个错误 - 我没有new以正确的方式覆盖该方法。

new方法必须是这样的:

经过“几个”小时的调试后,我设法解决了这个问题。

感谢所有花时间阅读并试图弄清楚为什么这不起作用的人。

0 投票
3 回答
585 浏览

perl - 将逻辑从 Template Toolkit 转移到 Catalyst

我认为我在 TT 模板中使用了太多的条件和计算。

我正在显示来自 DBIC 的项目结果集。对于每个项目,我需要使用检索到的值来计算事物,并且模板似乎不是正确的位置。

但在 Catalyst 中,它是来自 DBIC 的厚物体。

那么如何将逻辑移动到模型中呢?我必须为所有项目运行一个完整的循环并以某种方式更改对象吗?

问候:米格,