gpt4 book ai didi

perl - 在 DBIx-Class 中使用预取时如何仅选择特定列?

转载 作者:行者123 更新时间:2023-12-01 04:45:33 24 4
gpt4 key购买 nike

我正在为相当基本的 DBIx 类预取用法而苦苦挣扎。我想限制使用预取时从连接表返回的列。

这个:

my $rs = $schema->resultset('CD')->search(
{}, # No searching restrictions through WHERE clause
{
prefetch => [qw/ artist /],
columns => [qw/ title artist.name /],
}
);

生成此 SQL:
SELECT cd.title, artist.*
FROM cd
JOIN artist ON cd.artist = artist.id

但我不想拖下所有的艺术家列,只是 cd.title 和 Artist.name 列(在这个例子中,我的实际用例更复杂)。列功能似乎只适用于主表,而不适用于连接表。

我想要这个 SQL:
SELECT cd.title, artist.name
FROM cd
JOIN artist ON cd.artist = artist.id

我刚刚用 Catalyst/DBIx-Class 获得了我的海腿,所以我可能在这里忽略了一些非常明显的东西!

最佳答案

你是对的。只能选择主表中的列,不能获取连接表中的特定列。
你需要的是加入。使用 join 和 '+select','+as' 属性,您可以从两个表中选择特殊列。

预取也用于从预取表中选择所有列。当您确实需要这些列时,使用预取会更有效,例如所以你可以做 $cd->artist->name 而不需要它做额外的查询。但是,如果您不需要这些列,那么加载这些数据就会造成不必要的性能损失。

关于perl - 在 DBIx-Class 中使用预取时如何仅选择特定列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19786540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com