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


CakePHP 2.x containable + pagination for nested model

我在Cake中使用containable进行嵌套模型分页时遇到问题。。。

我有三个模型:Category,CompanyCategory,Company,还有类似的关联

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

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

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

一切都正常工作,直到我想对嵌套模型"公司"进行分页。我将CategoriesController与show方法结合使用,该方法呈现具有选定类别和关联公司的视图(Company hasMany Categories和category hasMany companies)。

我试过这样的东西:

$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);

但这对我来说并不奏效:(

有什么建议/帮助吗?

如果您定义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。。。。如果没有,那么您需要采取不同的方法

Finnaly我使用解决了我的问题

$this->Paginator->settings = array(
  'limit' => 2,
);
$this->Paginator->paginate('Category.CompanyCategory.Company');

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

但现在另一个问题阻碍了我…我使用TranslateBehavior,而我得到的数据没有翻译。。。

知道吗?我在谷歌上搜索了很多,但找不到任何令人满意的解决方案。