Переменная массива не обновляется после добавления условия поиска в cakephp 3.437

#cakephp #cakephp-3.x

Вопрос:

Я извлекаю данные в переменной pagination $dogs, а затем передаю их в ctp и отображаю эти данные. Поэтому, когда мы переходим на эту страницу, переменная $dogs содержит 10 записей из базы данных.

Когда я передаю данные поиска и добавляю условие в ту же переменную $dogs, она обновляется с результатом поиска в контроллере. например, если я передам «tomy» в поиске, добавлю условие и обновлю переменную $dogs, она отобразит только 3 записи с именем tomy.

Если я выведу переменную $dogs в контроллере, это даст мне правильный результат 3 записи.

Но в файле ctp он отображает данные без добавления условия, т. е. результат по умолчанию, который я получил в первый раз, когда мы загружаем страницу, состоящую из 10 записей.

У меня также есть чистый кэш, но я не уверен, почему это происходит.

Ниже приведен мой код

 if ($this->request->is('post')) {  $data = $this->request->getData(); $dogname = $data['search_dog']; $id = $data['client_id']; $this->request->session()->write('search_dog', $dogname); //$conditions['name LIKE'] = "%" . $dogname . "%";   $this->ClientDogs->belongsTo('ClientUsers', [  'className' => 'ClientUsers',  'foreignKey' => 'client_users_id', ]);  $dogs = $this->paginate($this->ClientDogs->find('all', ['contain' => ['ClientUsers'], 'conditions' => array('name LIKE' => '%' . $dogname . '%')]), ['limit' => 9]);  

} еще {

 $this->ClientDogs->belongsTo('ClientUsers', [  'className' => 'ClientUsers',  'foreignKey' => 'client_users_id', ]);  $dogs = $this->paginate($this->ClientDogs->find('all', ['contain' => ['ClientUsers']]), ['limit' => 9]);  

}

Здесь переменная $dogs дает правильный результат в контроллере, но когда я передал эту переменную $dogs в файле ctp, она дает тот же результат, который получают все $dogs, независимо от того, какое условие я передал.

Комментарии:

1. Вероятно, вам придется показать часть своего кода, например, действие контроллера и шаблон представления, не видя, что на самом деле происходит с точки зрения кода, все, что люди могли бы здесь сделать, это угадать.

2. Я отредактировал свой вопрос и добавил этот код.

Ответ №1:

 // keep this inside ClientDogs Model $this->belongsTo('ClientUsers', [  'className' => 'ClientUsers',  'foreignKey' => 'client_users_id', ]);  // Inside controller  // why to use POST while search ? // if the filters params sent via post it wont be on the URL, and it cant be retrive while GET // if the $dogname is stored on the session, it has to retrive while GET  $params = $this->request->getQuery();  // $id = $params['client_id']; // this is unused  $conditions = []; if(!empty($params['search_dog'])){  $conditions[] = ['ClientDogs.name LIKE' => '%' . $params['search_dog'] . '%']; }  $dogQuery = $this->ClientDogs->find('all', ['contain' => ['ClientUsers'], 'conditions' => $conditions ]);  $dogs = $this->paginate($dogQuery, ['limit' => 9]);