データベース モデルを開発および設計するとき、リレーションシップに埋め込まれた値が特定の値と等しいかどうかをクエリする必要がある場合があります。この問題は実際のアプリケーションでよく発生しますが、解決するのは簡単ではありません。この記事では、関係の埋め込み値が特定の値と等しいかどうかをクエリする効率的な方法を備えたモデルを紹介します。ご安心ください。すぐに理解して実際の開発に応用できるよう、簡潔でわかりやすい言葉でわかりやすく説明します。見てみましょう!
互いに関連している (リレーションシップに属している) 2 つの異なるモデル (cars
と types
) があります。どのモデルにも公開データ (post
) 用の埋め込み struct
があります。特定の types
を取得したいのですが、post
の cars
値が特定の値と等しい場合の回答のみを受け取ります。
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
フィールドを削除し、対応するフィールドを
設定とシード
次に、gorm を介してデータベース接続を設定します。コードで定義されたモデルを、データベースに存在する関係と同期させます。デモのために、いくつかのダミー データを手動でシードしました。
ロジックを読む
preloadassociation
をロードするために使用されます
: 条件を指定するために使用されます (この場合、フィルターは埋め込み構造上にあります)
find
これが問題の解決に役立つかどうか教えてください。ありがとうございます! 以上がリレーションの埋め込み値が特定の値と等しいモデルをクエリするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。