2011-12-16 10 views
-2

ProductsControllerスクリプトのgrailsでこのSQLクエリを処理するにはどうすればよいですか? 2つのテーブルに製品IDの結合があることに注目してください。Groovyスクリプトの2つのテーブルクエリ

SELECT p.*,pd.* 
FROM products p, products_description pd 
WHERE p.products_id=pd.products_id 
ORDER BY p.products_date_added DESC 

もちろん、私はこれを行うことはできません。

def all= { 
    def a 
    a = Products.find("FROM products p, products_description pd 
     WHERE p.products_id=pd.products_id ORDER BY p.products_date_added DESC") 
    render a as JSON 
} 
+0

GORMファインダではないGroovyスクリプトの編集をやめますか?私が編集しているファイルはProductsCopntroller.groovyです。 – JPM

+0

GORMと対話するファインダを作成しようとしているGrailsコントローラです。それはグルーヴィーであるという事実は副作用が多いですが、それほど正確でないタイトルを残しておきたいのであれば、それで... –

+0

GORM finderよりもGroovyスクリプトを探しています。それが私が探しているものです。これはGORMファインダについて初めて聞いたことです... – JPM

答えて

1

あなたの代わりに任意のGrailsのダイナミックファインダーのカスタムSQLクエリを使用しての断固としている場合は、次のコードを使用することができます。

def session = sessionFactory.getCurrentSession() // a reference to the sessionFactory is injected in all controllers and services that have a sessionFactory variable defined 
    Query query = session.createSQLQuery("SELECT p.*,pd.* 
    FROM products p, products_description pd 
    WHERE p.products_id=pd.products_id 
    ORDER BY p.products_date_added DESC"); 
    def result = query.list() 

あなたのコントローラにsessionFactoryという名前の変数を追加する必要があります。このようなもの:

class ProductsController = { 
     def sessionFactory 

結果リストはリストのリストになります。メインリストの各要素は、最初の要素を製品として、2番目の要素を製品の説明として、サイズ2のリストになります。

+0

私はあなたの例を辿ってこのエラーを受け取りました: .GrailsExceptionResolver - 要求の処理時に例外が発生しました:[GET]/mygrails/prods/all org.hibernate.MappingException:いいえJDBC型のダイアレクトマッピング:-1 – JPM

+0

なぜ、それがText列で問題があるようでしたか?私はテキストをVarchar(10000)に変更しました。ありがとう! – JPM

+0

文字列をデータベースのテキストフィールドにマップする場合は、マッピングクロージャでその文字列を指定する必要があります。 <あなたのフィールド名>に、ドメインクラスのマッピングクロージャに 'text'と入力する必要があります –

0

あなたはMany-to-one and one-to-one関係を使用し、GORMはあなたのための協会の世話をさせることができます。

class Products { 
    ProductsDescription description 
    ... 
    static mapping = { 
     description column: 'products_id' 
    } 
} 

その後、参照することにより記述にアクセスすることができます。

a = products.listOrderByProductsDateAdded(order: 'desc') 
a.description.productsDescription 
+0

テーブルが既に設定されているので、私は関係を定義することができないので、これはうまくいきません。私はJonにSQLクエリを渡す必要があります...私はレガシーDBに接続しています各テーブルのコードがロックダウンされます。 – JPM

+0

@JPMそれは私が仮定したものです。だから私はあなたの外部キーのための静的マッピングを含んだ。 – jamesallman

+0

これは、Productsクラスでエラーをコンパイルしません。 '複数列のプロパティを単一列のプロパティとして扱うことはできません。' – JPM

関連する問題