Ошибка возвращается при попытке начать нумерацию страниц в Codeigniter 4 - PullRequest
4 голосов
/ 12 апреля 2020

Я пытаюсь запустить функцию нумерации страниц в Codeigniter 4 согласно документации .

$model = new \App\Models\UserModel();

$data = [
    'users' => $model->paginate(10),
    'pager' => $model->pager
];

Мой код контроллера следующий:

public function jobmarket() {
    $this->jobs = new \App\Models\Jobs();

    if (!$this->ionAuth->loggedIn())
    {
        return redirect()->to('/logg-inn');
    }

    echo view("dashboard/header", ([
        'ionAuth' => $this->ionAuth,
        'uri' => $this->uri,
    ]));

    echo view("dashboard/jobmarket", ([
        'session' => $this->session,
        'ionAuth' => $this->ionAuth,
        'validation' => $this->validator,
        'jobs' => $this->jobs->paginate(20)->all_jobs(),
        'pager' => $this->jobs->pager()->all_jobs(),
    ]));

    echo view("assets/footer");

}

Однако, при запуске этого я получаю следующую ошибку:

Argument 1 passed to CodeIgniter\Database\BaseResult::getResult() must be of the type string, null given, called in xxxx/app/vendor/codeigniter4/framework/system/Model.php on line 44 7

Это моя модель

public function all_jobs() {
    $this->categories = new \App\Models\Categories();
    $builder = $this->db->table('jobs');
    $builder->select('*');
    $builder->join('users', 'users.id = jobs.jobs_u_id');
    $builder->join('categories', 'category_id = jobs.jobs_category');
    // Make sure to not show current user's listings, since these will show up under "My listings"
    $builder->where('jobs_u_id !=', $this->current_user->id);
    // Check that the listing reflects users chosen categories
    $builder->whereIn('category_id', $this->categories->user_categories());
    $builder->orderBy('jobs_id', 'desc');
    $query =  $builder->get();
    if ($builder->countAllResults() > 0)
    {
        return $query->getResult();

    } else {
        return false;
    }
}

Любая помощь для решения этой проблемы будет принята.

1 Ответ

2 голосов
/ 22 апреля 2020

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

  1. Метод paginate() возвращает результат, поэтому он должен быть последним в вашей цепочке. Пример: $this->jobs->all_jobs()->paginate(20)
  2. Вы можете получить Pager следующим образом: $this->jobs->pager
  3. Если вы хотите использовать метод all_jobs() с методом paginate(), вам необходимо верните модель по вашему all_jobs() методу

Вот правильный код для вашего контроллера:

public function jobmarket() {
    $this->jobs = new \App\Models\Jobs();

    if (!$this->ionAuth->loggedIn())
    {
        return redirect()->to('/logg-inn');
    }

    echo view("dashboard/header", ([
        'ionAuth' => $this->ionAuth,
        'uri' => $this->uri,
    ]));

    echo view("dashboard/jobmarket", ([
        'session' => $this->session,
        'ionAuth' => $this->ionAuth,
        'validation' => $this->validator,
        'jobs' => $this->jobs->all_jobs()->paginate(20),
        'pager' => $this->jobs->pager,
    ]));

    echo view("assets/footer");
}

А вот правильный код для вашей модели:

public function all_jobs() {
    $this->categories = new \App\Models\Categories();
    $builder = $this->db->table('jobs');
    $builder->select('*');
    $builder->join('users', 'users.id = jobs.jobs_u_id');
    $builder->join('categories', 'category_id = jobs.jobs_category');
    // Make sure to not show current user's listings, since these will show up under "My listings"
    $builder->where('jobs_u_id !=', $this->current_user->id);
    // Check that the listing reflects users chosen categories
    $builder->whereIn('category_id', $this->categories->user_categories());
    $builder->orderBy('jobs_id', 'desc');

    return $this;
}

Чтобы увидеть точное место, которое вызывает ошибку, попробуйте установить CI_ENVIRONMENT = development в файле .env в каталоге root. После этого попробуйте перезагрузить страницу, где вы нашли эту ошибку. Вы увидите страницу ошибки CodeIgniter с обратным следом. Попробуйте скопировать все данные из backtrace и разместить здесь, это поможет понять, что именно происходит.

...