问题标签 [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 投票
3 回答
1856 浏览

mysql - 如何在 Perl 中干净地提取 MySQL 枚举值?

我有一些代码需要在插入数据库之前确保一些数据在 mysql 枚举中。我发现这样做的最干净的方法是以下代码:

我们正在使用DBIx::Class。当然有更好的方法来实现这一点吗?(请注意,$table 变量来自我们的代码,而不是来自任何外部来源。因此,没有安全问题)。

0 投票
2 回答
807 浏览

perl - 如何使用外部数据过滤 DBIX::Class 结果集?

使用DBIx::Class并且我有一个结果集,需要通过 SQL 无法生成的数据进行过滤。我需要做的是有效地等同于这个假设的例子:

通读文档让我不知道如何完成这样的策略。

0 投票
1 回答
264 浏览

perl - 如何将 DBD::Proxy 与 DBIx::Class 一起使用?

我需要通过防火墙获得数据库连接,并限制可以运行的查询。DBD::Proxy 似乎是解决这个问题的完美解决方案。但是,我目前正在使用 DBIx::Class,并且不知道如何将它们连接在一起。

特别是 DBD::Proxy 不使用 SQL;它需要特定的命名查询。但是 DBIx::Class 似乎没有办法调用这些命名查询。

这是在基于 Catalyst 的 web 应用程序中。

0 投票
2 回答
678 浏览

perl - 如何使用 mod_perl 在 CGI::Application 中拥有持久的 DBIx::Class?

我在带有 DBIx::Class 的 mod_perl 上使用 CGI::Application,我希望在实例化时定义一个新的 dbic 模式。到目前为止,我还无法让它工作。我最接近的是一个超类,它有一个 connect() 方法,它返回一个新对象,但我宁愿它已经被连接和实例化。

我真的很感激任何想法。

谢谢!

注意:好的,显然还没有帮助,但是,与此同时,我创建了一个访问器,它可以懒惰地实例化 DBIx::Class,所以这可能会更好一些。核实:

然后当然要使用它,您可以执行以下操作:

0 投票
4 回答
4338 浏览

perl - 在使用 Template Toolkit 的 Catalyst 项目中显示 DBIx::Class ResultSet 的正确方法是什么?

给定一个 DBIx::Class 结果集,例如:

我读过的教程使用存储来传递行的arrayref:

这会导致此时执行查询,并将结果对象填充到存储中,因此它们可以在 TemplateToolkit 中用作:

是否有适当的方法让 TT 在从数据库中获取行时对其进行迭代?

0 投票
3 回答
5057 浏览

sql - 我可以在 DBIx::Class 中漂亮地打印 DBIC_TRACE 输出吗?

将 DBIC_TRACE 环境变量设置为 true:

生成非常有用的输出,特别是显示正在执行的 SQL 查询,但 SQL 查询都在一行上。

有没有办法通过某种“sql tidy”例程来更好地格式化它,也许将它分成多行?如果做不到这一点,谁能给我一个提示,我需要破解代码中的哪个位置来添加这样的钩子?最好的工具是接受格式错误的 SQL 查询并推出格式良好的查询?

在这种情况下,“漂亮的格式”仅仅意味着比“全部在一行上”更好。我对格式查询的特定样式并不特别在意

谢谢!

0 投票
2 回答
1688 浏览

perl - 如何使用固定连接条件建立 DBIx::Class 关系?

我们有一个可以在一侧处理多种类型的对象的链接表,但我不知道如何使用 has_many 从这些对象之一获取链接表。

示例:链接表包含:

从资源端建立关系很容易:

但是我一直没能从页面端得到对应关系:

会得到 not_page 链接

给出一个“无效的 rel cond val page”错误(这对我来说并不奇怪)。

给出“无效的 rel cond val "page"”错误。扔反斜杠没有帮助。

DBIx::Class::Relationship::Base说:

条件必须是表之间连接的SQL::Abstract样式表示

我从那里尝试了各种不同的选择,例如:

但根本没有任何成功。

如果我将另一个字段添加到始终包含值“页面”的页表中,我可以这样做

但这几乎不是最佳解决方案。

为每种类型将链接表拆分为单独的一个可能是可能的,但这是一个正在考虑适应 DBIx::Class 的现有项目,可能还有其他地方将一个表拆分为多个其他表更多比它的价值麻烦。

0 投票
1 回答
323 浏览

perl - 我可以在 DBIx::Class 中建立“父母有_很多孙子”关系吗?

我想要这样的功能:

我可以通过简单的链式连接在父类之外轻松完成:

但是在父类中,我无权(也不应该)访问模式对象。在我可以访问的父类内部,$self->children但它返回一个子类的结果集,我必须遍历它们以获取每个子类的grandchildren.

有什么方法可以定义这种 ActiveRecord 风格吗?

0 投票
3 回答
1396 浏览

database - 如何在 mod_perl 中建立 DBIC 持久数据库连接?

我正在为我的 Web 应用程序使用 mod_perl。目前,我计划在网络上使用一个mysql数据库。在对 display_customer_transaction.cgi 的每个 CGI 请求中,我的脚本将

  1. 跨网络打开数据库连接
  2. 使用 SQL 语句对数据库执行查询
  3. 分析从数据库中检索到的数据
  4. 以 HTML 格式打印数据
  5. 关闭数据库连接

经过一些分析,我意识到步骤(1)是瓶颈。因此,我希望避免为每个 CGI 请求打开和关闭数据库连接。我的愿望是,如果我的第一个 CGI 请求打开了一个数据库连接,我的第二个传入 CGI 请求(来自不同的客户端)可能会重用第一个数据库连接。

我试图用谷歌搜索“DBIX 持久数据库连接”,但几乎找不到相关结果。(编辑:那是因为它被称为 DBIC,或 DBIx::Class,而不是 DBIX。)

我使用Apache::DBI进一步查找相关信息(但是,我的意图是在 DBIX 上,而不是 Apache::DBI)。有一些信息让我感到困惑:

Apache::DBI 模块仍然有一个限制:它在每个进程的基础上保持数据库连接的持久性。

一直以来,我对 Apache 如何服务 CGI 请求的概念是

  1. Apache 将始终生成一个新进程来服务传入的新 CGI 请求。每当 Perl 解释器执行完 Perl 脚本时,进程就会死掉。

那么,如果 Apache::DBI 模块只能在每个进程的基础上保持数据库连接的持久性,我的第二个 CGI 请求如何重新使用第一个 CGI 请求打开的连接?

但回到我原来的问题。如何在 mod_perl 中建立 DBIX 持久数据库连接?

0 投票
2 回答
2608 浏览

sql - 从 DBIx::Class 中的多个表中选择

我有以下 DBIx::Class 代码:

下面的 SQL 语句是根据上面的 DBIx::Class 代码生成的:

现在,我希望从 4 个表中获得结果。我手动编写自己的 SQL 代码:

我尝试将上面的 SQL 语句转换为 DBIx::Class,如下所示:

当我尝试在resultset上执行next时,出现异常“Not an ARRAY reference” 。请注意,我不允许在 DBIx::Class中使用join ,作为引用者附属表,与 *table*** 表没有关系。

如何让 DBIx::Class 代码等效于 SQL 多选表?