【问题标题】:CakePHP 2.x containable + pagination for nested modelCakePHP 2.x 可包含 + 嵌套模型的分页
【发布时间】:2014-04-15 06:51:50
【问题描述】:

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

我有三个模型: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);

一切正常,直到我想对嵌套模型 - Company 进行分页。我将 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);

但这对我不起作用:(

有什么建议/帮助吗?

【问题讨论】:

  • 嵌套模型是什么意思? btw模型的关系是什么?
  • 我的意思是嵌套关联。 Category hasManyCompanyCategory(Category 和 Company 之间的链接表),CompanyCategory belongsTo Category 和 belongsTo Company。公司有很多公司类别。这很好用,但我不知道如何为公司实现分页。
  • 为什么不建立公司 HABTM 类别的关系。这可以解决你的问题
  • 我尝试使用 HABTM,但仍然得到分页的类别而不是公司,如下例所示
  • 你想给公司分页,对吧?

标签: php cakephp pagination model-associations containable


【解决方案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.... 如果不是,那么您需要采取不同的方法

【讨论】:

  • 试试这个,但没用。仍然得到所有公司而不是限制所说的一个。
  • 我认为这会将类别与关联公司分页
【解决方案2】:

最后我用

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

);

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多