簡體   English   中英

如何為DBIx :: Class ORM強制加入類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM