Error: Call to undefined method CodeIgniter\Database\MySQLi\Result::paginate()

Error: Call to undefined method CodeIgniter\Database\MySQLi\Result::paginate()

在 CI4 中努力思考 paginate。用户指南中的所有示例都显示 ->paginate() 方法直接链接到控制器中的 $model 变量(不带参数)。

我的所有查询都在模型中,所以如果 paginate 方法在我的查询末尾,或者在控制器中调用它的地方,我会感到有点困惑。我都试过了 - 都没有用。

型号:

    public function brand_name($brand_name_slug)
    {
        return $this
                    ->db
                    ->table('shop a')
                    ->select()
                    ->join('(SELECT sku, MIN(sale_price) AS sale_price FROM shop GROUP BY sku) AS b', 'a.sku = b.sku AND a.sale_price = b.sale_price')
                    ->where('availability', 'in stock')
                    ->where('a.sku !=', '')
                    ->where('brand_name_slug', $brand_name_slug)
                    ->groupBy('a.sku')
                    ->orderBy('brand_name, subbrand_name, product, size, unit')
                    ->get()
                    ->paginate(10) // not working
                    ->getResult();
    }

它returns错误:Call to undefined method CodeIgniter\Database\MySQLi\Result::paginate()

我的控制器:

class Shop extends Controller
{

    public function brand_name($brand_name_slug)
    {
        $model = new ShopModel();

        $data = [
            'category_menu' => $model->category_menu(),
            'brand_menu' => $model->brand_menu(),
            'nav' => $model->nav(),
            'subnav' => $model->subnav(),
            'shop' => $model->brand_name($brand_name_slug)->paginate(10), // also doesn't work
            'pager' => $model->pager
        ];

        if (empty($data['shop']))
        {
            throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the news item: '. $slug);
        }

        echo view('templates/header', $data);
        echo view('shop/view', $data);
        echo view('templates/footer', $data);
    }

Returns 错误:Call to a member function paginate() on array

任何人都可以给我一些指导来解决这个问题吗?

您必须在没有 get()getResult() 的情况下使用 pagination() 函数,并注意它是您的自定义模型扩展自模型 class 的函数。所以你应该直接从模型中调用它,而不是从$this->db(这就是他不知道的原因)。

这应该是您模型中的函数:

public function brand_name($brand_name_slug)
    {
        return $this
                    ->table('shop a')
                    ->select()
                    ->join('(SELECT sku, MIN(sale_price) AS sale_price FROM shop GROUP BY sku) AS b', 'a.sku = b.sku AND a.sale_price = b.sale_price')
                    ->where('availability', 'in stock')
                    ->where('a.sku !=', '')
                    ->where('brand_name_slug', $brand_name_slug)
                    ->groupBy('a.sku')
                    ->orderBy('brand_name, subbrand_name, product, size, unit')
                    ->paginate(10);
    }

并且 $data 在你的控制器中:

$data = [
            'category_menu' => $model->category_menu(),
            'brand_menu' => $model->brand_menu(),
            'nav' => $model->nav(),
            'subnav' => $model->subnav(),
            'shop' => $model->brand_name($brand_name_slug),
            'pager' => $model->pager
        ];