【发布时间】:2021-02-06 06:56:04
【问题描述】:
我目前被 CI4 的内置分页卡住了。 我尝试在我的模型中对函数的结果进行分页,但它不起作用:
我的模特:
<?php
namespace App\Models;
use CodeIgniter\Model;
class CategoriesModel extends Model
{
protected $table = 'categories';
protected $allowedFields = [];
protected $beforeInsert = ['beforeInsert'];
protected $beforeUpdate = ['beforeUpdate'];
//Kategorie(n) laden
public function getCategories($categoryID = null)
{
$db = \Config\Database::connect();
if (!$categoryID) {
$builder = $db->table('categories');
$query = $builder->get();
$results = $query->getResultArray();
} else {
$builder = $db->table('categories');
$query = $builder->where('categoryID', $categoryID);
$query = $builder->get();
$results = $query->getRow();
}
return $results;
}
}
在我的控制器中,我尝试从模型中对“getCategories”函数的结果进行分页:
<?php
namespace App\Controllers;
use App\Models\CategoriesModel;
use App\Models\PodcastsModel;
class Categories extends BaseController
{
public function index($page = 1)
{
$this->request->setLocale(session()->get('locale'));
//Helper laden
helper(['form', 'template', 'userrights']);
$data['template'] = getTemplate();
$model = new CategoriesModel;
$data['categories'] = $model->getCategories()->paginate(5, 'test', $page, 2);
$data['pager'] = $model->pager;
//Recht "13" (Benutzergruppen) prüfen
if ($data['userrights'][13] == 0) {
return redirect()->to('/admin');
}
//Views aufbauen
echo view($data['template'] . '/templates/header', $data);
echo view($data['template'] . '/backend/navigation');
echo view($data['template'] . '/templates/sidebar');
echo view($data['template'] . '/backend/categories');
echo view($data['template'] . '/templates/footer');
}
}
所以行
$data['categories'] = $model->getCategories()->paginate(5, 'test', $page, 2);
会导致如下错误:
错误 调用数组上的成员函数 paginate()
当我使用时
$data['categories'] = $model->paginate(5, 'test', $page, 2);
它工作得很好。但它对类别表中的所有结果进行分页,正如模型中声明的那样。
但由于我想对函数的结果进行分页,具体取决于我传递给模型的变量,
有没有办法将分页类用于模型功能?
【问题讨论】:
-
问题在于您的 $results 退货声明。您正在返回最终结果(即数组),因此您无法链接方法。尝试返回可以链接的对象,而不是结果。我通常使用 Repository 模式,链接方法来实现链接而不是扩展模型并将方法包含在模型本身中。
标签: php codeigniter model pagination codeigniter-4