persist
というSQLテーブルがあると仮定し、自動インクリメントのInt64
キーの代わりにプライマリキーとしてText
というカスタムを持っているとします。Yesod:カスタムプライマリキーを使用して `persist`データベースにクエリする
例えば、私のデータベースの定義はこれです:
私はその後、平野Text
値を持って、私の
Text
に一致する主キーを持つ行のためのデータベースを照会するための慣用的な方法は何であると仮定すると
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
TorrentD
infoHash Text
ipAddr [Text]
Primary infoHash
deriving Show
|]
値? runDB $ get $ toSqlKey ("test" :: Text)
toSqlKey
はカスタムプライマリキーをサポートしていないため、Int64
が必要です。
キーを手動で作成してrunDB $ get $ Key $ PersistText ("test" :: Text)
を実行すると、Key
が範囲外であるというエラーが表示されます(私のインポートではDatabase.Persist.Class
)。
私は、永続的な上記のスキーマがプライマリキーをテキストにするとは思わない。 'Primary infoHash'行はあなたのスキーマに一意制約を追加するだけです。主キーはまだ 'Int64'です。 dbを検査して確認することができます。 – Sibi
スキーマは 'CREATE TABLE" torrent_d "(" info_hash "VARCHAR NOT NULL、" ip_addr "VARCHAR NOT NULL、PRIMARY KEY(" info_hash "))'です。 カスタムプライマリキーを作成するメカニズムは、[ここに記載されています](https://github.com/yesodweb/persistent/wiki/Persistent-entity-syntax#primary-and-foreign-keys)です。 – stalin
ええ、そうです。 – Sibi