Item と Manufacturer の 2 つのドメイン クラスがあります。メーカーには、アイテムの有効期限が近づいているときにユーザーに警告するプロパティがあります (その日付は Joda DateTime オブジェクトとして保存されます)。関連するフィールドはそのように設定されています。
class Manufacturer {
Integer expirationWarning
static hasMany = [items: Item]
}
と
class Item {
DateTime expirationDate
static belongsTo = [manufacturer: Manufacturer]
}
有効期限が現在から現在までの時間に有効期限警告日を加えたアイテムのリストを作成しようとしています。MySQLターミナルでクエリが正しく機能するようになりました。
SELECT i.id FROM items as i
LEFT JOIN (manufacturer as m) ON (m.id = i.manufacturer_id)
WHERE i.expiration_date <= DATE_ADD(current_date, INTERVAL m.expiration_warning DAY);
次に、Grails で同じクエリを実行する必要があります。createCriteria が次のようになることはわかっています。
def itemsExpiringSoon = Item.createCriteria().list(max: listMax, offset: params.offset) {
createAlias('manufacturer', 'm', CriteriaSpecification.LEFT_JOIN)
le('expirationDate', new DateTime().plusDays('m.expirationWarning'))
order('expirationDate', 'desc')
}
しかし、DateTime.plusDays() でそのフィールドの値を使用するために、「m.expirationWarning」の代わりに何を配置すればよいかわかりません。これに関するガイダンスは非常に役立ちます。