CakePHP 2.x包含嵌套模型的分页+分页

时间:2014-04-15 06:51:50

标签: php cakephp pagination model-associations containable

我在使用Cake中的可包含的嵌套模型分页时遇到问题...

我有三个型号:Category,CompanyCategory,Company,那里有关联

Category hasMany CompanyCategory
CompanyCategory belongsTo Category 
CompanyCategory belongsTo Company
Company hasMany CompanyCategory

我使用contains获取数据,如下所示:

$options = [
  'conditions' => ['Category.slug' => $slug],
  'contain' => [
    'CompanyCategory.Company.CompanyAddress'
  ]
];
return $this->find('first', $options);

一切正常,直到我想要对嵌套模型 - 公司进行分页。我使用带有show方法的CategoriesController,它使用所选类别和关联公司呈现视图(公司有许多类别和类别有很多公司)。

我尝试过这样的事情:

$this->Paginator->settings = [
  'limit' => 1,
  'order' => [
    'id' => 'asc'
  ],
  'contain' => array('CompanyCategory.Company')
];
$data = $this->Paginator->paginate('Category.CompanyCategory.Company', array('Category.slug LIKE' => $slug));
$this->set('category', $data);

但这对我不起作用:(

有任何建议/帮助吗?

2 个答案:

答案 0 :(得分:1)

如果您定义Category有hasAndBelongsToMany关系,那么对您来说很容易。因此,您创建了一个名为CompanyCategory的新模型,我假设有一个原因..

你可以试试这个 -

$this->Category->bindModel(
    array(
        'hasAndBelongsToMany' => array(
            'Company'
        )
    )
);
$this->Paginator->settings = array(
    'conditions' => array(
        'Category.slug' => $slug
    ),
    'limit' => 1,
    'order' => array(
        'id' => 'asc'
    ),
    'contain' => array(
            'Company'
    )
);

我假设您的关系表名称是categorys_companies ....如果没有,那么您需要采取不同的方法

答案 1 :(得分:0)

Finnaly我使用

解决了我的问题
$this->Paginator->settings = array(
  'limit' => 2,

);

$this->Paginator->paginate('Category.CompanyCategory.Company');

我忘了写我使用CategoriesController的方法,而不是公司。

但是现在另一个问题阻止了我...我使用了TranslateBehaviour,我得到的数据没有翻译......

有什么想法吗?我google了很多,但无法找到任何令人满意的解决方案。