Принуждение относится к отношениям в paginate cakephp - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь форсировать соединение функции paginate для CakePHP. У пользователя есть сообщения, что означает, что оно будет принадлежать пользователю. Я должен показать их в списке, поэтому мне нужно использовать здесь пагинацию. Проблема в том, что он не показывает мне запись модели, которую я намерен связать Мой код:

$userId     = $this->Session->read('SESSION_ADMIN.id');
        $this->helpers['Paginator'] = array('ajax' => 'Ajax');

      $this->Message->bindModel(
           array(
             'belongsTo'=>array(
                 'Npo'=>array(
                   'className'  =>  'Npo',
                 'foreignKey' => 'reciever_id',
                 'fields'     => 'Npo.username'
               )          
           )
        )
    );
    $this->paginate = array('conditions'=>array('Message.sender_id'=>$userId,'Message.sender'=>'Admin'),
                            'order'     => array('Message.modified DESC'),
                            'limit'     =>'1'
                              );     
    $sentMsg =  $this->paginate('Message');
    //$sentMsg =  $this->Message->find('all');
    pr($sentMsg);die();

когда я раскомментирую оператор FIND, он показывает мне запись, но в случае пагинации - нет. Кроме того, он не показывает мне объединение в запросе разбивки на страницы, но делает это при подсчете записей. У кого-нибудь есть идея. Я не хочу использовать paginate. Присоединяйтесь здесь. Есть ли способ принудительно установить принадлежность здесь?

С уважением Химаншу Шарма

1 Ответ

7 голосов
/ 18 октября 2011

Вы пробовали:

$this->Message->bindModel(
           array(
             'belongsTo'=>array(
                 'Npo'=>array(
                   'className'  =>  'Npo',
                 'foreignKey' => 'reciever_id',
                 'fields'     => 'Npo.username'
               )          
           )
        ), false // Note the false here!
    );

На самом деле paginator выполняет два запроса: один для подсчета общего количества записей и один для фактического извлечения нужных записей. По умолчанию ассоциации, созданные на лету с помощью bindModel(), сбрасываются после каждого запроса. От версии Cake зависит, какой запрос будет первым, но я считаю, что в вашем случае это запрос подсчета; оставив фактический запрос результатов без ассоциации. Установка false во втором аргументе bindModel () предотвращает сброс ассоциации после первого запроса.

...