我有代码:
$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" = ? ) )但是有没有办法用first case force JOIN代替LEFT JOIN呢?
发布于 2017-10-24 00:29:50
联接类型由DBIC架构中的关系定义。当你需要一个不同的连接类型进行搜索时,建议只定义另一个连接类型的关系,例如has_many('Subnets_full_join', ...),并在搜索中使用它,而不是常规的连接类型。
https://stackoverflow.com/questions/46887880
复制相似问题