问题标签 [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.
sql - 如何使用 `=` 以外的其他运算符制作 DBIx::Class 连接表?
概括
我有一张成对的物品表。我想自己加入它,这样我就可以在一个查询中检索这对的两边。这是有效的 SQL(我认为),SQLite 引擎确实接受它,但我无法让 DBIx::Class 硬着头皮。
最小的例子
最后一行生成以下 SQL:
我正在尝试使用 DBIx::Class 连接语法在and<>
之间获取运算符,但到目前为止还没有成功。dual.half_id
me.half_id
我尝试过的事情
文档提示 SQL::Abstract-like 语法。
我试着has_one
这样写关系:
stringref 后面的直接 SQL 也不行:
解决方法以及为什么它们对我来说不够
我可以通过复杂的search()
调用生成正确的 SQL,并且没有定义的关系。它非常难看,有(太多)硬编码的 SQL。对于遍历关系的每个特定情况,它必须以不可分解的方式进行模仿。
我可以通过添加一other_half_id
列并加入其中=
来解决这个问题。这显然是冗余数据。
CREATE VIEW AS SELECT *, opposite_of(side) AS dual FROM half...
我什至试图通过专用视图search()
(最后我没有足够的勇气让它工作。
希望的 SQL
这是我正在寻找的那种 SQL。请注意,这只是一个示例:我真的希望它通过关系完成,因此Half
除了search()
'join
子句之外,我也可以将它用作 ResultSet 访问器。
旁注
在我的完整扩展案例中,我真的加入了自我,但我很确定这不是问题。我把它保留在这里是为了减少大小写,因为它也有助于保持代码的大小。
我坚持加入/关系路径而不是复杂路径,search()
因为我有多种用途用于关联,而且我没有找到任何“一刀切”的搜索表达式。
延迟更新
两年后回答我自己的问题,它曾经是一个缺失的功能,此后一直在实施。
perl - 解析 Gmail 风格的高级搜索语法?
我想解析一个类似于 Gmail 使用 Perl 提供的搜索字符串。一个示例输入是“tag:thing by:{user1 user2} {-tag:a by:user3}”。我想把它放到一个树形结构中,比如
一般规则是:
- 以空格分隔的标记默认为 AND 运算符。
- 大括号中的标记是替代选项 (OR)。大括号可以放在字段说明符之前或之后。即“by:{user1 user2}”和“{by:user1 by:user2}”是等价的。
- 以连字符为前缀的标记被排除在外。
这些元素也可以组合和嵌套:例如“{by:user5 -{tag:k by:user3}} 等”。
我正在考虑编写一个上下文无关的语法来表示这些规则,然后将其解析到树中。这是不必要的吗?(这可能使用简单的正则表达式吗?)
推荐使用哪些模块来解析上下文无关语法?
(最终这将用于生成带有 DBIx::Class 的数据库查询。)
perl - DBIx::Class 是否具有透明缓存?
在 C#/.Net 世界中,有诸如 NHibernate 或 ActiveRecord 之类的 ORM 包括透明缓存:数据库更新透明地复制到缓存中,对象在可用时直接从缓存中检索,等等(通常使用 memcached)。
看起来 Perl 中没有透明缓存与DBIx::Class可用。我错过了什么?这似乎是一个普遍的需求,我很惊讶我在 CPAN 或 Google 上找不到任何东西。
perl - 如何从 DBIx::Class 中的链接表中获取值?
在我的应用程序中,我有 2 个表、书籍和标签,以及链接表 book_tags。链接表还包含该书被此特定标签标记的次数。我可以通过添加标签
但是,当我检索一本书的标签时
它似乎没有从链接表中返回值。
有没有办法从链接表中获取值而无需手动操作?
perl - 哪本书对 DBIx::Class 的讨论最好?
我不知道DBIx::Class ORM 是否足以证明一本关于该主题的整本书的合理性,但我想获得一本关于 DBIx::Class ORM 细节的书的推荐。
perl - 如何让 DBIx::Class 与 UTF-8 进行核对?
我正在尝试使用DBIx::Class::Resultset在 MySQL 数据库上实现 Web 搜索功能。除了一个问题外,我还让它工作:当搜索“ü”时,MySQL 将搜索作为“u”执行(换句话说,没有变音符号)。其他“扩展 ASCII”字符也是如此。表和连接采用 UTF8 格式。
我对数据库做了一些测试,找到了解决方案:在where子句中添加'collate utf8_bin',如:
但是我如何用 DBIx::Class 来实现它呢?我的搜索在一个查询中对两个表执行“WHERE ... LIKE”。
提前致谢,
毛里茨
sql - DBIx::Class 结果类和实际表
我正在研究 DBIx 类,但我有点困惑,因为到目前为止我与数据库的交互都是 PHP 代码中的普通 SQL 查询。
无论如何,据我了解,该类使用结果类中定义的模式进行操作,而不是直接与数据库交互。模式可以通过各种 .pm 类手动构建,也可以通过 Loader 类从数据库中提取。
我的问题是:对此的首选方法是什么?如果我手动构建我的结果类然后更改我的数据库怎么办?我想我必须同时编辑表和类,这不是有点不切实际吗?
谢谢
perl - 防止 DBIx::Class 调用与新的尚未插入的行相关的所有内容?
我的架构中有父/子关系。我想使用非常相似的代码来修改现有的父级以创建一个新的父级。编辑案例很容易找到孩子:
但是,在新案例中,发生了一些奇怪的事情:
我预计必须@children
是空的,但我取回了所有的孩子,不管父母是谁。
我可以做这样的事情(对于每个相关记录访问器,vomit):
请告诉我执行此操作的正确方法,因为以上不能是它。
版本: 0.08010,因为这是 Debian Lenny 所拥有的(以及我们的生产服务器正在运行的)
perl - 如何使用 DBIx::Class 进行子选择?
我从 DBIx::Class 开始,我有一个想要在 DBIx::Class 中的子选择,但我很困惑,无法构建代码。
我的 MySQL 选择是这个:
我读到 DBIx::Class 不支持子选择;真的吗?如果是这样,在这种情况下你会怎么做?
mysql - DBIx::Class 中的右侧 MySQL 函数
在 DBIx::Class 中,当我使用以下语法生成查询时:
生成的查询是完美的,除了右侧的函数用引号引起来。
如果没有引用,那将是正确的。我该怎么做?
谢谢,罗伯