cakePHP 検索条件の指定

明けましておめでとうございます。

置く場所に迷った王騎将軍のフィギュアを一旦玄関靴箱上に置いたので、帰宅時に嬉しくなります。

親はどけたそうにしてます。

今回は、異なるテーブルからも取ってこなければならず、ややこしかった部分を備忘録として残しておきます。

検索条件を指定している部分です。※名称は変更しています。

・例:MainTableで条件指定

            ->callback($searchInputKey['1'], [
                'callback' => function (Query $query, array $args) {
                    /** @var \App\Model\ListsTable $listsTable */
                    $listsTable = $this->getTableLocator()->get('Lists');

                    $subQuery = $listsTable->find()->select(['sub_id'])
                        ->where(['Lists.cos_flg IN' => $args['cos_flg']]);

                    $query->where(['Main.id IN' => $subQuery]);
                },
            ])

“IN”だと検索したい文言が含まれているかという検索になります。

           ->callback($searchInputKey['2'], [
                'callback' => function (Query $query, array $args) {
                    /** @var \App\Model\Table\SubListsventsTable $subListsTable */
                    $subListsTable = $this->getTableLocator()->get('SubLists');

                    $subQuery = $subListsTable->find()->select(['id'])
                        ->join([
                            'Users' => [
                                'table' => 'users',
                                'type' => 'INNER',
                                'conditions' => [
                                    'SubLists.user_id = Users.id',
                                ],
                            ],
                        ])
                        ->where([
                            'OR' => [
                                ['Users.name LIKE' => '%' . $args['user_name'] . '%'],
                                ['Users.name_kana LIKE' => '%' . $args['user_name'] . '%']
                            ]
                        ]);

                    $query->where(['Mains.event_id IN' => $subQuery]);
                },

“LIKE”はあいまい検索になります。

テーブルがいくつかにまたがるとややこしくなりますね。