【问题标题】:Error: Call to undefined method CodeIgniter\Database\MySQLi\Result::paginate()错误:调用未定义的方法 CodeIgniter\Database\MySQLi\Result::paginate()
【发布时间】:2020-09-22 19:54:46
【问题描述】:

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

我的所有查询都在模型中,所以如果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();
    }

返回错误: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);
    }

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

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

【问题讨论】:

标签: php codeigniter pagination codeigniter-4


【解决方案1】:

您必须在不使用 get()getResult() 的情况下使用 pagination() 函数,并注意它是您的自定义模型扩展自 Model 类的函数。所以你应该直接从模型中调用它,而不是从$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
        ];

【讨论】:

  • 一个小障碍......这现在引发了“404 - 未找到文件”错误 - 我假设这是一个路由问题。我的 Config/routes.php 文件包含以下 $routes->get('shop/brands/(:segment)', 'Shop::brand_name/$1'); 可能是这个 - 还是 .htaccess 问题?
  • 如果您没有在 CI4 中编辑 .htaccess,则可能是路由问题。框架通过分页处理它创建的路由,因此无需为?page=X创建特定路由
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 2012-01-03
  • 2016-10-20
  • 1970-01-01
  • 2017-09-11
  • 2013-09-04
  • 2013-11-06
  • 1970-01-01
相关资源
最近更新 更多