ホームページ  >  記事  >  バックエンド開発  >  Gorm で Preload() に Raw() を使用するにはどうすればよいですか?

Gorm で Preload() に Raw() を使用するにはどうすればよいですか?

WBOY
WBOY転載
2024-02-15 10:39:091158ブラウズ

如何在 Gorm 中使用 Raw() 进行 Preload() ?

php Xiaobian Yuzai が Gorm の Preload() に Raw() を使用する方法を紹介します。 Gorm は、データベース操作に便利なメソッドを多数提供する強力な Go 言語 ORM ライブラリです。場合によっては、クエリにネイティブ SQL ステートメントを使用する必要があり、Preload() メソッドを使用して関連データをプリロードすることも必要になることがあります。 Raw() メソッドを使用することで、Gorm の Preload() を組み合わせてこの要件を達成できます。次に、このテクニックをよりよく理解し、適用できるように、具体的な手順を詳しく説明します。

質問の内容

以前のプロジェクトでは、複雑なクエリを実行する必要があったため、Raw() を使用しました。クエリは次のようになります:

リーリー

gorm の内容/メソッドを使用してこれを完全に実行できるかどうかはよくわかりません。そのため、私がよく知っている単純なクエリを使用しているだけです。ここで、tbl1.type_id に関連付けられたレコードを取得したいと思います。 Raw() の前に Preload() を追加しようとしましたが、クエリ結果を保存するために使用している構造体の配列の内容を検査できないため、機能しないようです。 Type に が入力されているようです。

更新:

いろいろ調べた結果、上記の Raw() クエリを gorm メソッド チェーンに変換する方法を見つけました。次のようになります:

リーリー

これは前の Raw() クエリと同じように機能しますが、まだ何かが欠けています。これは、関連付けられたテーブルを table1 に取得する方法です (メソッド リンク上の actuator_device_infos です。少し面倒です) まだクリーンアップ中です新しいコード)。クエリ構築メソッドの前に Preload() を追加しても、結果のレコードには影響しないようです。メソッドチェーンには Model() を使用する必要がありますが、これがないとエラーが発生します。これは、Model() の解析されたテーブルがメソッドの FROM に使用されるためです。最後のクエリセクションなので、gorm は、プリロードしたいものが存在することをある程度理解しているはずです。私がプリロードしているのは actuator_types で、上記のコードに示すように、すでに Joins() が含まれています。

解決策

@Trock さんのコメントのおかげで、ついにパズルの最後のピースが見つかりました。 Preload() が機能するように、メソッド チェーンの最後で Find() を使用するだけでよいようです。最終的なコードは質問にあるコードと同じように見えますが、Scan()Find() に置き換えました。 Raw() コードで同じことを試してみましたが、これもうまくいきました。 gorm このメカニズムについては言及する必要があります。

以上がGorm で Preload() に Raw() を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。