CakePHP 2.x вмещаемый + нумерация страниц для вложенной модели

У меня есть проблема с нумерацией вложенных моделей с использованием содержимого в Cake...

У меня есть три модели: Категория, CompanyCategory, Company и там ассоциация такая

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

Я получаю данные с помощью содержать, как показано ниже:

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

Но это не сработало для меня:(

Любые предложения / помощь?

2 ответа

Если вы определите, что 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.

Но теперь другая проблема заблокировала меня... Я использую TranslateBehaviour, и данные, которые я получаю, не имеют переводов...

Любая идея? Я много гуглил, но не смог найти удовлетворительного решения.

Другие вопросы по тегам