私はGo for MySQLドライバーでgormを使用しています。ここで私がやろうとしていることがあります。ここで は私の2つの構造体です:構造ユーザー - セッションが多数あります。セッションを与えられたユーザーを見つけよう
type User struct {
ID uint `gorm:"primary_key"`
Email string `sql:"unique_index;not null;type:varchar(64)"`
Password string `sql:"index;not null;type:varchar(64)"`
Sessions []Session `gorm:"ForeignKey:UserID"`
Roles []Role `gorm:"many2many:users_roles;"`
Level uint `sql:"not null;type:tinyint(1);DEFAULT:1"`
}
type Session struct {
ID uint `gorm:"primary_key"`
SessionID string `sql:"index"`
UserID uint `sql:"index"`
UpdatedAt time.Time
}
コードから分かるように、構造体User
はがセッションを持つ多くの関係を持って持つようになっています。
ここでは、データベースにユーザーレコードがあり、ユーザーのIDを持つセッションテーブルにセッションレコードがあるとします。 私は、セッションIDに基づいてユーザーデータを取得できるようにしたいと思います。つまり、SessionID
に基づいてセッションレコードを探し、そのセッションのUserID
に基づいてユーザー情報を取得します。純粋なMySQLで
、私はこのようにそれを行うだろう:
SELECT
*
FROM
`users
WHERE `id` = (SELECT `user_id` FROM `sessions` WHERE `session_id` = <MY-SESSION-ID> LIMIT 1)
それとも私はせずにGORMでそれを行うだろうか、とにかくこの
SELECT
`u`.*
FROM
`users` `u`
LEFT JOIN `sessions` `s`
ON `s`.`user_id` = `u`.`id`
WHERE
`s`.`session_id` = <MY-SESSION-ID>
GROUP BY `u`.`id`
のように参加して、それを行うことができます生のSQLに頼っていますか? http://jinzhu.me/gorm/crud.html#preloading-eager-loading
それはどこのような構文で子テーブルをフィルタリングする機能を持っている:あなたが欲しい
「生のSQLに頼らずに、どうやってガンマでやっていますか?」 - これがORMを避ける理由です。あなたは彼らと一緒に働くよりも、彼らの周りに働く時間を費やします。 – Flimzy