Php 尝试在Codeigniter 4中启动分页时返回错误
我正在尝试按照启动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
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