CakePHP3.6: Paginator возвращает нулевые результаты, несмотря на то, что find () работает как обычно - PullRequest
0 голосов
/ 04 октября 2018

Супер смущен этим;просто используя стандартные запеченные шаблоны для доступа CRUD к моим моделям.Я перевожу этот проект из гораздо более старой версии торта, но опять же, пока что я просто использую готовые контроллеры и шаблоны.

/**
      * Index method
      *
      * @return \Cake\Http\Response|void
      */
     public function index() {
        $this->paginate = [
                'contain' => ['Associated1', 'Associated2', 'AssociatedEtc']
        ];
        $myModels = $this->paginate($this->MyModel);  // returns zero results
        $myModels_found = $this->MyModel->find('all'); // finds everything
        $this->set(compact('model'));
     }

В информации CookBook описываетсяРеализация Paginator совершенно иным образом, нежели изначально запрограммированные контроллеры (и, попробовав описанную там реализацию, получили точно такой же результат).

Важно, что, как и в $myModel_found, если я просто получаю записи через $model->find(), все возвращается как обычно, поэтому нет проблем с подключением к слою данных.

Как настроитьPaginator, так что он действительно извлекает мои записи?

ОБНОВЛЕНИЕ

После небольшого углубления я обнаружил, что Paginator возвращает нулевые результаты только для моделей с неассоциированнымиассоциации (т. е. строка в таблице Model1, которая имеет 0 или ноль для model2_id и т. д., не возвращается. Даже если я удалю условие contain, это поведение сохраняется.

1 Ответ

0 голосов
/ 05 октября 2018

** Еще иногда назад, даже я застрял в той же ситуации.В моем контроллере у меня есть:

** / **

 * Index method
 *
 * @return \Cake\Http\Response|void
 */
public function index()
{
    $query = $this->request->query('query');
    $this->paginate = [
        'contain' => ['Customers', 'Drivers'],
        'limit'=>200,
        'order'=>[
            'pick_date'=>'desc'
        ]
    ];
    if(!empty($query)){
            $this->paginate = [
                'conditions'=>[
                    'destination LIKE' => '%'.$query.'%',
                    'starting_point LIKE' => '%'.$query.'%'
                    ]
            ];
        } 
    $rides =$this->paginate($this->Rides);
    $this->set(compact('rides'));
}

Ошибка, которую я сделал, была в моем файле просмотра:

<div class="form-group">
            <label class="col-md-3 control-label">Customer</label>
            <div class="col-md-4">
                <?= $this->Form->control('customer_id',array('class'=>'form-control input-circle', 'options'=>$customers, 'label'=>false)) ?>
            </div>
        </div>

В моем случае написание 'customer_id' было неверным, и поэтому результат не отображался в таблице представлений.Но теперь все работает нормально.

Пожалуйста, проверьте все варианты написания имен соответствующих столбцов.

Если я где-то ошибаюсь, пожалуйста, нене возражаю.Я учусь в CakePHP 3.

...