CakePHP 3.6.14: поле автозаполнения с поиском по нескольким столбцам в таблице базы данных - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь создать форму с полем автозаполнения (Customer).Поэтому, когда пользователь вводит в это поле несколько букв, тогда текущий запрос вернет всех клиентов, которые содержат эти буквы в полях name, surname или company, и пользователь может выбрать один из них, чтобы заполнить форму.

Это поле формы для клиента:

add.ctp

echo $this->Form->control('customer', ['id' => 'Autocomplete', 'empty' => true]);

Это функция Js:

<script type="text/javascript">
        $(document).ready(function(){
            // Caching the movieName textbox:
            var company = $('#Autocomplete');

            // Defining a placeholder text:
            company.defaultText('Search for customers');

            // Using jQuery UI's autocomplete widget:
            company.autocomplete({
                minLength    : 1,
                source        : 'getAll',
                select: function( event, ui ) {
                   event.preventDefault();
                   $(company).val(ui.item.id);
               },
            dataType: "jsonp",
            success: function( data ) {
                response( data );
            }
            });

        });

        // A custom jQuery method for placeholder text:

        $.fn.defaultText = function(value){

            var element = this.eq(0);
            element.data('defaultText',value);

            element.focus(function(){
                if(element.val() == value){ 
                    element.val('').removeClass('defaultText');
                }
                }).blur(function(){ 
                if(element.val() == '' || element.val() == value){ 
                    element.addClass('defaultText').val(value);
                }
            });

            return element.blur();
        }
</script>

Controller.php

Это функция getAll, которая содержит запрос:

public function getAll() {


        $this->autoLayout = false;
        $this->autoRender = false;


        $results = TableRegistry::get('Customers')->find('all', ['fields' => ['company', 'name', 'surname'], 
            'conditions' => [
                    'name LIKE' => '%'.$this->request->query('term').'%',
                    'company LIKE' => '%'.$this->request->query('term').'%',
                    'surname LIKE' => '%'.$this->request->query('term').'%',
            ]]);
        $response = array();
        $i = 0;
        foreach($results as $result){
           $response[$i] = $result['company'];

            $i++;

        }

       echo json_encode($response);

}

Но я не получаю никаких результатов ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...