[英]How to force join type for DBIx::Class ORM?
我有代碼:
$self->search_related( 'Servers', {
'Servers.active' => 'yes',
'Ips.state' => 0,
},{
join => { Subnets => 'Ips' }
})->as_query;
產生:
SELECT "me"."id", "me"."active", "me"."ip_id", "me"."locality_id", "me"."hostname", "me"."ca_certificate", "me"."openvpn_static_key", "me"."l2tp_key", "me"."description", "me"."notes"
FROM "servers" "me"
LEFT JOIN "subnets" "Subnets" ON "Subnets"."server_id" = "me"."id"
LEFT JOIN "ips" "Ips" ON "Ips"."subnet_id" = "Subnets"."id"
WHERE ( ( "Ips"."state" = ? AND "Servers"."active" = ? AND "me"."locality_id" = ? ) )
我可以通過以下方式重寫此代碼:
$self->search_related( 'Servers', { active => 'yes' } )
->search_related( 'Subnets' )
->search_related( 'Ips', { state => 0 } )
->as_query
會產生:
SELECT "Ips"."id", "Ips"."subnet_id", "Ips"."ip", "Ips"."package_id", "Ips"."state", "Ips"."notes"
FROM "servers" "me"
JOIN "subnets" "Subnets" ON "Subnets"."server_id" = "me"."id"
JOIN "ips" "Ips" ON "Ips"."subnet_id" = "Subnets"."id"
WHERE ( ( "active" = ? AND "me"."locality_id" = ? AND "state" = ? ) )
但是,是否有一種方法可以強制使用JOIN
而不是LEFT JOIN
?
連接類型由DBIC架構中的關系定義。 當您需要不同has_many('Subnets_full_join', ...)
類型進行搜索時,建議僅定義與此has_many('Subnets_full_join', ...)
類型的另一種關系,例如has_many('Subnets_full_join', ...)
並在搜索中使用它而不是常規的關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.