ホームページ  >  に質問  >  本文

v1 から v2 にアップグレードした後、Golang Gorm スコープが壊れる

Gorm v1 を使用しています。ページング範囲は正常に動作します:

リーリー

と私の呼ばれ方:

リーリー

繰り返しますが、これは Gorm v2 にアップグレードするまでは正常に動作していました。次のメッセージが表示されます:

[0.204ms] [行: 2] SELECT * FROM ジャンル LIMIT 2 SQL: スキャンでは 1 ではなく 9 個のターゲット パラメータが予期されました; SQL: スキャンでは 1 ではなく 9 個のターゲット パラメータが予期されました [GIN] 2022/06/18 - 00:41:00 | 400 | 1.5205 ms | 127.0 .0.1 | Get " /api/v1/ジャンル" エラー #01: SQL: 1 ではなく 9 個のターゲット パラメータをスキャンする必要があります; SQL: 1 つではなく 9 個のターゲット パラメータをスキャンする必要があります

エラーの原因は次の行であることがわかりました。 db.Model(エンティティ).Count(&totalRows) これを削除すると、クエリが正しく実行されるためです (TotalPages のデータは計算されていないため、明らかに間違っています)。ドキュメントを見ると、https://gorm.io/docs/method_chaining.html#Multiple-Immediate-Methods があるので、totalRows を取得するために使用された接続が再利用されており、データが残っているため、オフセットおよび制限クエリが失敗します。 カウントとオフセットのクエリ用に新しいセッションを作成してみました。 db.Model(エンティティ).Count(&totalRows).Session(&gorm.Session{})

return db.Offset(p.Offset).Limit(p.PerPage).Session(&gorm.Session{})

誰もが自分のセッションを使用できればいいのですが、うまくいかないようです。

###助言がありますか?

P粉005417748P粉005417748259日前466

全員に返信(1)返信します

  • P粉465287592

    P粉4652875922024-02-04 17:11:07

    必要な方がいらっしゃいましたら:

    新しいセッションを作成する必要がありましたが、正しい方法で作成しませんでした。私は最終的に次のことを行いました:

    リーリー

    効果は期待通りです。したがって、私の現在の範囲は次のとおりです:

    リーリー

    countDBSession 経由でカウントを取得するために新しいセッションを使用していることに注意してください。これは、return db.Offset( の *db.Gorm パラメータには影響しません。 p.Offset) .Limit(p.PerPage) 使用量).Session(&gorm.Session{})

    返事
    0
  • キャンセル返事