【问题标题】:is there a possibility to make pagination work for multiple tables within same controller and view是否有可能为同一控制器和视图中的多个表进行分页
【发布时间】:2020-04-30 02:53:32
【问题描述】:

控制器代码:控制器代码适用于雇主分页,但无法对 Stories 控制器进行分页。

    public $paginate = [
        'Employers' => ['scope' => 'employer'],
        'Stories' => ['scope' => 'story']
    ];

    public function index()
    {
        // Paginate property
        $this->loadComponent('Paginator');

        // In a controller action
        $stories = $this->paginate($this->Stories, ['scope' => 'story']);
        $employers = $this->paginate($this->Employers, ['scope' => 'employer']);
        pr($stories);
        $this->set(compact('employers', 'stories'));

    }

模型代码:模型描述对于所有模型来说都是一样的,但是理解模型定义不能适用于故事模型,但是随着我们对雇主表的模型定义的进展,它工作得很好。

<?php
// src/Model/Table/EmployersTable.php
namespace App\Model\Table;

use Cake\ORM\Table;

class EmployersTable extends Table
{
    public function initialize(array $config): void
    {
        $this->addBehavior('Timestamp');
    }
}

<?php
// src/Model/Entity/Employer.php
namespace App\Model\Entity;

use Cake\ORM\Entity;

class Spk extends Entity
{
    protected $_accessible = [
        '*' => true,
        'id' => false,
        'slug' => false,
    ];
}

<?php
// src/Model/Table/StoriesTable.php
namespace App\Model\Table;

use Cake\ORM\Table;

class StoriesTable extends Table
{
    public function initialize(array $config): void
    {
        $this->addBehavior('Timestamp');
    }
}

<?php

// src/Model/Entity/Story.php
namespace App\Model\Entity;

use Cake\ORM\Entity;

class Sty extends Entity
{
    protected $_accessible = [
        '*' => true,
        'id' => false,
        'slug' => false,
    ];
}

当我完成加载页面操作时,我一直在寻找错误,我面临着雇主数据调用但故事数据无法加载的问题。建议开放查看期待您的回答。

错误信息:

Undefined property: EmployersController::$Stories in /Applications/MAMP/htdocs/sd/sd/src/Controller/EmployersController.php

【问题讨论】:

  • 可以使用自定义查询。
  • 故事查询与雇主查询分开定义

标签: php cakephp pagination controller cakephp-4.x


【解决方案1】:

当然有可能,该功能明确为documented。该错误与分页无关,仅表示您尝试访问的属性 ($this-&gt;Stories) 不存在。

控制器只有一个自动加载的默认模型,即根据约定与控制器名称匹配的模型,因此在您的 EmployersController 中,这就是 Employers 模型。额外的模型需要手动加载:

$this->loadModel('Stories');

// ...

$stories = $this->paginate($this->Stories, ['scope' => 'story']);

另见

【讨论】:

  • 但是您的示例显示了一个模型状态的示例,其中包含两个模型示例 Stories 和 Districts。善待。谢谢。
【解决方案2】:

不,这是不可能的,因为 CakePHP 仅适用于对同一模型有多个分页查询请求的单个表。但不适用于许多模型。

【讨论】:

  • 有什么方法可以让两个表格在同一个视图中分页?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
相关资源
最近更新 更多