DOC select
属性:
select表示应从存储
中选择哪些列
这可以按预期工作:
$rs->search( undef, { select => [ 'me.id', 'me.user_id' ] } )
->search( undef, { select => [ 'me.role_id' ] } )
$rs->as_query; # SELECT "me"."role_id" FROM "users_roles" "me"
但这不是:
$rs->search( undef, { prefetch => [ 'User' ] } )
->search( undef, { select => [ 'User.name' ] } )
$rs->as_query; # SELECT "User"."name", "User"."id", "User"."email", "User"."name" FROM "users_roles" "me" JOIN "users" "User" ON "User"."id" = "me"."user_id"
prefetch
隐含+columns
(+select
和+as
)。
我只通过请求一列select
search
中更改name
我错过了什么?
为什么我仍然会获得列name
,id
,email
,name
而不只是name
列?
答案 0 :(得分:0)
如果我通过加入重写prefetch
。这很好用:
$rs->search( undef, {
,join => [ 'User' ]
,collaplse => 1
,'+columns' => [map
{ +{ "cds.$_" => "cds.$_" } }
$c->db->source('Right')->related_source('User')->columns
]
})->search( undef, { select => [ 'User.name' ] } )
$rs->as_query; # SELECT "User"."name" FROM "users_roles" "me" JOIN "users" "User" ON "User"."id" = "me"."user_id"
所以似乎prefetch
存在错误。由于join
+ collapse
+ +columns
与prefetch
不同:
此属性是指定“加入”规范的简写,将加入的相关来源中的所有列添加为“+列”并将“折叠”设置为真值。
另外,文档说明:
例如,以下两个查询是等效的
正如您所看到的,join
和prefetch
不等同