我在使用go-pgorm 生成正确的选择查询时遇到问题,其中一个表记录可以被软删除,而其他 2 个不能。
数据库表:
| 管道实例 |
|---|
| instance_id 整数 |
| pipeline_id 整数 |
| event_id 整数 |
| 管道触发器 |
|---|
| 你的手 |
| pipeline_id 整数 |
| deleted_at 时间戳 |
| 管道触发事件 |
|---|
| event_id 整数 |
| trigger_id 整数 |
go-pg 型号:
type pipelineTriggerEvent struct {
tableName struct{} `pg:"pipeline_trigger_events,alias:pte"`
Trigger *pipelineTrigger `pg:"rel:has-one,join_fk:id"`
PipelineInstance *pipelineInstance `pg:"rel:has-one,join_fk:event_id"`
*TriggerEvent
}
type pipelineTrigger struct {
tableName struct{} `pg:"pipeline_triggers,alias:pt"`
*Trigger
}
type pipelineInstance struct {
tableName struct{} `pg:"pipeline_pipeline_instances,alias:ppi"`
*PipelineInstance
}
我试图生成的查询:
SELECT
pte.*, trigger.*, pipeline_instance.*
FROM
pipeline_trigger_events AS pte
LEFT JOIN pipeline_triggers AS trigger ON (trigger.id = pte.trigger_id)
LEFT JOIN pipeline_pipeline_instances AS pipeline_instance ON pipeline_instance.event_id = pte.event_id AND trigger.pipeline_id = pipeline_instance.pipeline_id
由 go-pg orm 生成的查询:
SELECT
pte.*, trigger.*, pipeline_instance.*
FROM
pipeline_trigger_events AS pte
LEFT JOIN pipeline_triggers AS trigger ON (trigger.id = pte.trigger_id)
AND trigger.deleted_at IS NULL -- this is the unwanted line.
LEFT JOIN pipeline_pipeline_instances AS pipeline_instance ON pipeline_instance.event_id = pte.event_id AND trigger.pipeline_id = pipeline_instance.pipeline_id
在上面提到的所有 3 个表/模型中,只有 pipeline_triggers 表deleted_at具有用于软删除的列。我的要求是在结果集中也包括软删除的 pipeline_triggers 行。但是orm 会自动在子句中go-pg添加条件。如何删除此条件并获取所有行,包括软删除行。trigger.deleted_at IS NULLjoin
我尝试使用AllWithDeleted函数,但它适用于主要模型,即 pipeline_trigger_events(并且该表无论如何都没有 deleted_at 列)而不是 on pipeline_triggers,因此失败并出现此错误: pg: model=PipelineTriggerEvent does not support soft deletes
智慧大石
慕斯709654
随时随地看视频慕课网APP
相关分类