Фильтр поиска плагин cakephp cakedc по значению имени и условиям

У меня есть поисковый плагин cakedc с cakephp 3.0, работающий нормально, но я хотел бы иметь более продвинутые поисковые фильтры, такие как:

city = 'Los Angeles';
city != 'Los Angeles';
city LIKE '%Angeles%';
city LIKE 'Los%';
city NOT LIKE '%Angeles%';
city NOT LIKE 'Los%';
etc...

Так что я хочу добавить 2 выпадающих и 1 текстовый ввод для достижения этой цели.

'city' будет в выпадающем списке полей базы данных.

=,! =, как%?%, как%?, не как?% условия будут выпадающим

Значение для поиска "los angeles" будет напечатано в.

2 ответа

Я чищу код, только потому, что смотрю большой код. Иначе, почему вы включаете пустую опцию в поле выбора условия? не выглядеть лучше с условием поиска по умолчанию? Saludos

Выяснилось, не может быть идеальным, но, кажется, работает нормально:

Посмотреть:

<?php echo $this->Form->input('dbfield', ['label' => 'Field', 'options' => [''  => '', 'region' => 'Region', 'city' => 'City', 'keyword' => 'Keyword']]); ?>

<?php echo $this->Form->input('dbconditions', [
    'label' => 'Condition',
    'options' => [
        ''  => '',
        'contains' => 'contains',
        'doesnotcontain' => 'does not contain',
        'beginswith' => 'begins with',
        'endswith' => 'ends with',
        'isequalto' => 'is equal to',
        'isnotequalto' => 'is not equal to',
    ],
]); ?>

<?php echo $this->Form->input('dbvalue', ['label' => 'Value', 'class' => 'form-control input-sm']); ?>

модель

public $filterArgs = [
    'dbfield' => [
        'type' => 'finder',
        'finder' => 'conds0',
    ],
    'dbconditions' => [
        'type' => 'finder',
        'finder' => 'conds0',
    ],
    'dbvalue' => [
        'type' => 'finder',
        'finder' => 'conds',
    ],
];

public function findConds0(Query $query, $options = []) {

}

public function findConds(Query $query, $options = []) {

    if($options['data']['dbconditions'] == 'contains') {
        $conditions = [
            $options['data']['dbfield'] . ' LIKE' => '%' . $options['data']['dbvalue'] . '%',
        ];
    }
    if($options['data']['dbconditions'] == 'doesnotcontain') {
        $conditions = [
            $options['data']['dbfield'] . ' NOT LIKE' => '%' . $options['data']['dbvalue'] . '%',
        ];
    }
    if($options['data']['dbconditions'] == 'beginswith') {
        $conditions = [
            $options['data']['dbfield'] . ' LIKE' => $options['data']['dbvalue'] . '%',
        ];
    }
    if($options['data']['dbconditions'] == 'endswith') {
        $conditions = [
            $options['data']['dbfield'] . ' LIKE' => '%' . $options['data']['dbvalue'],
        ];
    }
    if($options['data']['dbconditions'] == 'isequalto') {
        $conditions = [
            $options['data']['dbfield'] => $options['data']['dbvalue'],
        ];
    }
    if($options['data']['dbconditions'] == 'isnotequalto') {
        $conditions = [
            $options['data']['dbfield'] . ' != ' => $options['data']['dbvalue'],
        ];
    }

    return $query->where($conditions);

}
Другие вопросы по тегам