Php 尝试在Codeigniter 4中启动分页时返回错误

Php 尝试在Codeigniter 4中启动分页时返回错误,php,codeigniter,codeigniter-4,Php,Codeigniter,Codeigniter 4,我正在尝试按照启动Codeigniter 4中的分页功能 我的控制器代码如下: public function jobmarket() { $this->jobs = new \App\Models\Jobs(); if (!$this->ionAuth->loggedIn()) { return redirect()->to('/logg-inn'); } echo view("dashboard/header

我正在尝试按照启动Codeigniter 4中的分页功能

我的控制器代码如下:

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");

}
但是,运行此命令时,我会出现以下错误:

传递给CodeIgniter\Database\BaseResult::getResult()的参数1必须是在第44行的xxxx/app/vendor/codeigniter4/framework/system/Model.php中调用的字符串类型,给定为null

这是我的模型

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;
    }
}

如有任何帮助,我们将不胜感激

我不知道您到底从哪里得到这个错误,但我在您的代码中发现了一些错误。试着修复这些bug,也许对你有帮助。以下是错误:

  • paginate()
    方法返回结果,因此它必须是链中的最后一个。 示例:
    $this->jobs->all_jobs()->paginate(20)
  • 你可以得到这样的
    寻呼机:
    $this->jobs->Pager
  • 如果要将
    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;
    }
    

    要查看导致错误的确切位置,请尝试在根目录的
    .env
    文件中设置
    CI_ENVIRONMENT=development
    。之后,尝试重新加载发现此错误的页面。您将看到带有回溯的CodeIgniter错误页面。尝试从backtrace复制所有数据并放在这里,这有助于理解到底发生了什么。

    在我的情况下,我必须用我自己的
    findAll()
    方法覆盖
    findAll()
    ,并检查我的特定模型是否扩展了CodeIgniter的
    模型

    我得到的错误基本上和你@kanarifugl一样

    所以我有这样的想法:

    
    

    我希望这对其他人有所帮助。

    从模型类中删除构造函数以解决问题

    > Argument 1 passed to CodeIgniter\Database\BaseResult::getResult()
    > pagination
    

    你能不分页试试吗?似乎错误在于模型,而不是分页本身。此外,您的寻呼机实现可能不正确。我尝试了$model->pager,但它对我不起作用,所以我将它改为$inventoryModel->pager->getDetails()。尝试将$this->jobs->pager()->all_jobs()更改为$this->jobs->pager->getDetails(),看看是否可行。另外,从代码中签出pager类。它会给你一些想法。但我认为您的错误很可能与模型本身有关。$builder->join('categories','category\u id=jobs.jobs\u category');它不应该是categories.id还是categories.category\u id。我怀疑category\u id来自用户表。注释出连接并逐个添加广告。要查看sql是否正确,请打印($this->db->last_query());打印($query)以查看结果。在phpmyadmin或mysql developer中运行查询,查看它返回的内容。也可以共享您的类别模型
    > Argument 1 passed to CodeIgniter\Database\BaseResult::getResult()
    > pagination