3

わかった。Coldfusion アプリケーションで ORM を使い始めたばかりです。今まで本当に順調に進んでいます。私はこの障害物を打ちました。私はこれらの2つのテーブルを持っています:

ここに画像の説明を入力

これは、ページにデータをロードするために使用しているコードです。if の 2 番目の部分はデフォルトのロードで、最初の部分はリストを特定のカテゴリに絞り込むために使用されるものです。

<cfif form.filtercat neq ''>
    <cfset load = ormexecuteQuery('from product_spec_cats as cats inner join cats.product_spec_cat_prod_cat_lnk as link WHERE link.spl_prod_cat_id = #form.filtercat#',{},false)>
<cfelse>
    <cfset load = entityload('product_spec_cats')>
</cfif>

クエリはこれを返します。cfelseこれはまさに私が必要としているものです:

ここに画像の説明を入力

クエリはこれを返しますが、cfifこれは、各親配列に 2 つの子があるため問題です。

ここに画像の説明を入力

それで、私の質問は、HQL を記述して、デフォルトのクエリと同じ構造でデータを返し、データをフィルタリングできるようにするにはどうすればよいですか?

4

1 に答える 1

7

実行しているHQLは、選択するものを定義していないため、エンティティproduct_spec_catsproduct_spec_cat_prod_cat_linkエンティティの両方を選択しています。

from product_spec_cats as cats 
inner join cats.product_spec_cat_prod_cat_lnk as link 
WHERE link.spl_prod_cat_id = #form.filtercat#

このクエリは、基本的にselect * from ...通常のSQLクエリのクエリと同じです。あなたがしたいことはこれです:

select cats
from product_spec_cats as cats 
inner join cats.product_spec_cat_prod_cat_lnk as link 
where link.spl_prod_cat_id = #form.filtercat#

関係の設定方法によっては、内部結合さえ必要ない場合があり、次のようにクエリを記述できます。

from product_spec_cats as cats    
where cats.product_spec_cat_prod_cat_lnk.spl_prod_cat_id = #form.filtercat#`

最後に、余談ですが、特にformスコープからクエリに何かを貼り付ける場合は、クエリパラメータを使用することをお勧めします。

ormExecuteQuery("
    select cats
    from product_spec_cats as cats
    inner join cats.product_spec_cat_prod_cat_lnk as link
    where link.spl_prod_cat_id = :catID
", { catID = form.filtercat });
于 2013-01-10T19:21:28.973 に答える