2013-09-14 2 views
1

Я использую ниже код, но CakePHP выйти сообщение об ошибке: «Модель„Комментарий“не связан с моделью„User“»модели CakePHP не ассоциирующиеся при использовании Containable

$this->Paginator->settings = array(
      'contain' => array_merge(
        array(
         'Comment' => array(
          'limit' => 1, 
          'User' => array(
           'fields' => array('username','id'), 
          ), 
         ) 
        ), 
      ), 
      'recursive' => 1, 
      'conditions' => $conditions, 
      'limit' => 10,      
    ); 

    $posts = $this->Paginator->paginate('Post'); 

В модели пользователя:

public $hasMany = array(
    'Comment' => array(
     'className' => 'Comment', 
     'foreignKey' => 'author', 
     'dependent' => false 
    ), 
); 

И в замечании модели:

public $belongsTo = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'author', 
    ) 
); 
+0

Вы добавили 'public $ actAs = array ('Containable'); в начале ваших моделей? Или вы экспериментировали с этим? – Jelmer

+0

Да, я добавил это. Причина моей проблемы связана с комментарием модели пользователя с помощью Containable: 'User' => array ( 'fields' => array ('username', 'id') ) But Cakephp get out error! – user2665477

+0

можете ли вы var_dump настройки Paginator :: сразу после объявления переменной? Итак, мы знаем, что содержит $ условия и какова фактическая ценность этого массива? – Jelmer

ответ

0

во-первых, вы не должны использовать

'recursive' => 1
с Containable Бех Avior. Это поведение связано с тем, чтобы получить связанные модели, как вы хотите, поэтому в классе AppModel добавьте
public $recursive = 0
. Далее у вас контроллер попробуйте:

$this->paginate['User'] = array(
      'conditions' => $conditions, 
      'limit' => 10, 
      'contain' => array(
         'Comment' => array(
          'limit' => 1, 
          'User' => array(
           'fields' => array('username','id'), 
          ), 
         ) 
      ), 
); 
Смежные вопросы