|
Re: SQLの記述について ありがとうございました。 おかげ様で、ほしい情報が取得されていることが確認できました。
EC-CUBEというかDoctrineが初めてで独自の記述方が勉強しながらですが英語のものが多く理解に時間がかかってしまっているのですが SQL記述に関する質問でもう一つだけお聞きしてもよろしいでしょうか?
query_builderでサブクエリを使ってSQLを組む場合はどのように記述すればよいのでしょう?
ご教示いただければ幸いです。 よろしくお願いいたします。
以下に、状況の説明を載せておきます。
商品検索画面で(同じような状況が商品登録と受注検索でも使用する予定なのですが)、利用者ごとに表示されるカテゴリを絞りたいと思いましてただDoctrineでのサブクエリの記述がわかっていなったためひとまず考えがあっているかどうかという部分でハードコーディングでif文の条件分岐をさせていたのですが、やはりかっこ悪いのとたぶんセキュリティ面もあまりよくないと思いまして コードの量も長くなってしまいますし…
商品検索を例に SearchProductType.phpのカテゴリの部分で以下のようなSQLをquery_builderで作成したいと思っています。
・カテゴリ構成(例) 食器 ┣店舗A ┗店舗C インテリア ┣店舗B ┗店舗C
思惑: ログインしているユーザ名と同じ名前のカテゴリ(カテゴリ名が店舗名になるようになっています)を取得する。
考えたSQL: SELECT * FORM dtb_category ca WHERE (ca.category_id, ca.parent_category_id) IN ( SELECT Ca.category_id, Ca.parent_category_id WHERE Ca.category_name = '取得した店舗名')
これで、取得した店舗名からカテゴリIDの同じものに対して表示を行う。 しかし、店舗Cの場合表示がこのままだと店舗Cで2個並ぶようになってしまいそれぞれの親がどちらなのかわからないという問題があります。
query_builderで作成してみたSQL 'query_builder' => function(EntityRepository $er) use($name) { return $er->createQueryBuilder('ca') ->where('(ca.id , ca.Parent) IN (SELECT Ca.id, Ca.Parent FROM dtb_category Ca WHERE Ca.name = :name)') ->setParameter('name', $name) ->orderBy('ca.rank', 'DESC'); }, これの場合、QueryExceptionとなり [Syntax Error] line 0, col 54: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ',' のエラーが出てしまっています。
|