テーブルの 1 つである go-pg
orm を使用して正しい結合選択クエリを生成するのに苦労しています。レコードは論理的に削除できますが、他の 2 つのテーブル レコードは削除できません。
データベーステーブル:
パイプライン_インスタンス |
---|
instance_id int |
パイプライン_id int |
イベントID int |
パイプライン_トリガー |
---|
id int |
パイプライン_id int |
削除済み_タイムスタンプ |
パイプライン_トリガー_イベント |
---|
イベントID int |
trigger_id int |
go-pg モデル:
リーリー私が生成しようとしているクエリ:
リーリーgo-pg orm によって生成されたクエリ:
リーリー リーリー 上記の 3 つのテーブル/モデルのうち、pipeline_triggers テーブルのみに論理的な削除用の deleted_at
列があります。私の要件は、論理的に削除された Pipeline_triggers 行も結果セットに含めることです。ただし、go-pg
orm は、trigger.deleted_at is null
条件を join
句に自動的に追加します。この条件を削除して、論理的に削除された行を含むすべての行を取得するにはどうすればよいですか。
allwithdeleted 関数を使用してみましたが、メイン モデルである Pipeline_trigger_events では機能しますが (テーブルにはとにかく delete_at 列がありません)、 pipeline_triggers
では機能しないため、次のように失敗します。このエラー:
pg:model=pipelinetriggerevent はソフト削除をサポートしていません
pg-go のコードをしばらく閲覧した後、あなたがやりたいことをサポートするかどうかはわかりません。これを確認するには、デバッガーで以下のコードをステップ実行する必要がある場合があります。
結合用のクエリを作成する場合、クエリには次の部分があります:
https://github.com/go -pg/pg/blob/c9ee578a38d6866649072df18a3dbb36ff369747/orm/join.go#l283
リーリーj.appendalias(b)
行は、次の appendalias()
関数を呼び出します。
https://github.com/go-pg/ pg/blob/c9ee578a38d6866649072df18a3dbb36ff369747/orm/join.go#l200
すべての結合には 1 対 1 の親関係があるため、すべてのテーブルに追加されます。 https://github.com/go-pg/ pg/blob/c9ee578a38d6866649072df18a3dbb36ff369747/orm/join.go#l153
リーリーこれを回避するには、他の 2 つの関係ではなく、親関係に対してのみ appendalias()
を呼び出すことだと思いましたが、pg-go はこれをサポートしていないようです。
これを行うには、pg.query()
または pg.querywithcontext()
を呼び出し、上記の SQL ステートメントを渡すだけです。
pg-go/pg はメンテナンス モードにあるため、これをサポートする可能性は低いことにも言及する価値があります。このプロジェクトが pg-go にどの程度定着しているかによっては、現在開発が進められている bun の使用を検討することもできます。
###付録###これは、上記の最初のコード スニペットで呼び出される
appendsoftdelete() 関数です:
以上が論理的に削除された行を含む結合句の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。