#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]);