ホームページ >バックエンド開発 >Golang >リレーションの埋め込み値が特定の値と等しいモデルをクエリするにはどうすればよいでしょうか?

リレーションの埋め込み値が特定の値と等しいモデルをクエリするにはどうすればよいでしょうか?

WBOY
WBOY転載
2024-02-09 18:39:08952ブラウズ

リレーションの埋め込み値が特定の値と等しいモデルをクエリするにはどうすればよいでしょうか?

データベース モデルを開発および設計するとき、リレーションシップに埋め込まれた値が特定の値と等しいかどうかをクエリする必要がある場合があります。この問題は実際のアプリケーションでよく発生しますが、解決するのは簡単ではありません。この記事では、関係の埋め込み値が特定の値と等しいかどうかをクエリする効率的な方法を備えたモデルを紹介します。ご安心ください。すぐに理解して実際の開発に応用できるよう、簡潔でわかりやすい言葉でわかりやすく説明します。見てみましょう!

質問の内容

互いに関連している (リレーションシップに属している) 2 つの異なるモデル (carstypes) があります。どのモデルにも公開データ (post) 用の埋め込み struct があります。特定の types を取得したいのですが、postcars 値が特定の値と等しい場合の回答のみを受け取ります。

shorty さんは、以下のモデルに基づいて、cars.post.published が true に等しいすべての types を見つけたいと言いました。

######モデル###### リーリー

db.preload("car").find(&type) を使用すると、応答オブジェクトの car

値を取得できました。

car 構造体で where() 関数を使用すると (つまり、where(car{brand: "volvo"}) brand を渡すことができます。 値を取得しますが、post (つまり、where(car{post: post {published: true})) を使用すると、すべてが返されるだけです。 クエリを実行する必要があるメイン モデルを where() 関数のベースとして使用する方がよいでしょう。例えば:### リーリー ...しかし、これはうまくいかないようです。生の SQL ジェネレーターを使用せずにそのようなクエリを実装するにはどうすればよいですか?

解決策

次の方法で問題を解決できました。まずコードを共有し、次に説明する価値のある重要なポイントを説明します。 リーリー

それでは、いくつかの洞察を共有しましょう。

構造定義

このシナリオを処理するために少し変更しました。

type

構造体から

car

フィールドを削除し、対応するフィールドを

car

構造体定義に追加しました。

設定とシード 次に、gorm を介してデータベース接続を設定します。コードで定義されたモデルを、データベースに存在する関係と同期させます。デモのために、いくつかのダミー データを手動でシードしました。 ロジックを読む

次に、クエリを実行して関連データを取得します。次の方法を使用しました:

debug

: 実際の SQL ステートメントを記録するために使用されます

model
    : 処理する関係を指定するために使用されます
  1. preload
  2. :
  3. typeassociation をロードするために使用されます
  4. where: 条件を指定するために使用されます (この場合、フィルターは埋め込み構造上にあります) find
  5. : 結果を変数にマッピングするために使用されます
  6. これが問題の解決に役立つかどうか教えてください。ありがとうございます!

以上がリレーションの埋め込み値が特定の値と等しいモデルをクエリするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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