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{})
誰もが自分のセッションを使用できればいいのですが、うまくいかないようです。
###助言がありますか?
必要な方がいらっしゃいましたら:
新しいセッションを作成する必要がありましたが、正しい方法で作成しませんでした。私は最終的に次のことを行いました:
リーリー効果は期待通りです。したがって、私の現在の範囲は次のとおりです:
リーリーcountDBSession
経由でカウントを取得するために新しいセッションを使用していることに注意してください。これは、return db.Offset( の
*db.Gormパラメータには影響しません。 p.Offset) .Limit(p.PerPage) 使用量).Session(&gorm.Session{})