バージョン選択

フォーラム

メニュー

オンライン状況

67 人のユーザが現在オンラインです。 (47 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 66
uk88nepro もっと...

サイト内検索

プラグイン > 開発について > リポジトリメソッドのエンティティ名に指定するのは?

開発について

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
h_tanaka
投稿日時: 2017/6/16 16:48
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: リポジトリメソッドのエンティティ名に指定するのは?
hata さん
ありがとうございます。

ご提示のスレッドにメソッドの記載があったのでそのまま使えそうです。
ただ、対象のメソッドを含むリポジトリの記述方法がわからないです。

どこまで合っているのわかりませんが、試した実装を以下に記載します。

まず、配送方法テーブルに対して NOT IN 検索したかったので、リポジトリを拡張しようとしました。
findNotContainsBy() メソッド内はご提示のスレッドにおけるnanasessさんのご回答からの引用です。

app/Plugin/Test/Repository/ExtendedDeliveryRepository.php
class ExtendedDeliveryRepository extends DeliveryRepository
{
    /**
     * NOT IN で検索する.
     *
     * @param array $criteria
     * @param array $orderBy
     * @param integer $limit
     * @param integer $offset
     * @return array
     * @see EntityRepository::findBy()
     */
    public function findNotContainsBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
    {
        $qb = $this->createQueryBuilder('d');

        foreach ($criteria as $col => $val) {
            $qb->andWhere($qb->expr()->notIn('d.'.$col, ':'.$col))
                ->setParameter($col, (array)$val);
        }

        if (is_array($orderBy)) {
            foreach ($orderBy as $sort => $order) {
                if (array_values($orderBy) === $orderBy) { // 配列 or 連想配列
                    $sort = $order;
                    $order = 'ASC';
                }
                $qb->orderBy('d.'.$sort, $order);
            }
        }

        if ($limit > 0) {
            $qb->setMaxResults($limit);
        }
        if ($offset > 0) {
            $qb->setFirstResult($offset);
        }

        return $qb->getQuery()->getResult();
    }
}


次に、FormEvents::POST_SET_DATA にてメソッドを使用したかったので、拡張フォームの addEventListener() で呼び出そうとしました。
しかし、ここでつまりました。。

app/Plugin/Test/Form/Extension/ShoppingTypeExtension.php
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $app = $this->app;
        if ($app->isGranted('ROLE_ADMIN')) {
            return;
        }

        // カート内商品のブランド以外の配送方法を非表示
        $builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) use ($app) {
            $form = $event->getForm();

            findNotContainsBy();  // ★ どうやって呼び出す?
        });
    }

    public function getExtendedType()
    {
        return 'shopping';
    }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   リポジトリメソッドのエンティティ名に指定するのは? h_tanaka 2017/6/16 12:42
     Re: リポジトリメソッドのエンティティ名に指定するのは? h_tanaka 2017/6/16 14:56
       Re: リポジトリメソッドのエンティティ名に指定するのは? hata 2017/6/16 15:43
       » Re: リポジトリメソッドのエンティティ名に指定するのは? h_tanaka 2017/6/16 16:48
           Re: リポジトリメソッドのエンティティ名に指定するのは? hata 2017/6/16 18:10
             Re: リポジトリメソッドのエンティティ名に指定するのは? h_tanaka 2017/6/19 10:59

 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,974名です
総投稿数は110,019件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.