2012-06-29 2 views
1

У меня есть модель дерева с этой структурой и таблицами:CakePHP вложенные содержат

Rate: 
id, model_name, object_id 
1 , SocialPost, 12 
public $belongsTo => array(
       'SocialPost' => array(
        'className' => 'Social.SocialPost', 
        'foreignKey' => 'object_id', 
        'conditions' => array(
         'Rate.object_id = SocialPost.id', 
        ), 
       ) 
      ) 

SocialPost: Ид, file_id

public $hasOne = array(
    'File' => array(
     'className' => 'File', 
     'foreignKey' => false, 
     'conditions' => array(
      'File.id = SocialPost.file_id', 
     ), 
    ), 
); 

Файл: идентификатора, название


все древовидные модели действуют как сдерживаемые

этот код работать хорошо в SocialPostsController:

$posts = $this->SocialPost->find('all', array(
     'limit' => 5, 
     'contain' => array(
      'File' 
     ) 

    )); 

выход: http://pastie.org/private/9ixxufncwlr3tofgp8ozw

но этот код в RatesController возвращать тот же файл для всех SocialPost:

$mostRated = $this->Rate->find('all', array(
     'limit' => $count, 
     'contain' => array(
      'SocialPost' => array(
       'File' 
      ) 
     ) 

    )); 

выход: http://pastie.org/private/lbqryo1gxgvxjb5omfwrw

, что здесь не так?

ответ

1

Я думаю, что ваши ассоциации все должно быть belongsTo:

class Rate extends AppModel { 
    public $belongsTo = array(
    'SocialPost' => array(
     'className' => 'Social.SocialPost', 
     'foreignKey' => 'object_id', 
    ) 
); 
} 

class SocialPost extends AppModel { 
    public $belongsTo = array(
    'File' 
); 
} 

И тогда ваша команда находка может выглядеть следующим образом:

$mostRated = $this->Rate->find('all', array(
    'limit' => $count, 
    'contain' => array(
    'SocialPost.File' 
) 
)); 

Кроме того, я бы перепроверить, что ваш 'className' => 'Social.SocialPost' правильно. Это означает, что модель SocialPost существует в плагине под названием Social.

+0

Социальный - это плагин, а SocialPost - его модель. Я не могу использовать attribTo для файла в SocialPost. Поскольку у каждого сообщения есть один файл и в файловой модели у меня есть. Для файла SocialPost.every принадлежит много SocialPost. – realman

Смежные вопросы