2013-05-22 2 views
0

Сообщество, есть проблема с несколькими таблицами, которые получают свои записи одной и той же модели «Опубликовать» на той же странице. При нажатии на номер пагарина приложение изменит страницу для обеих таблиц.Cake PHP paginate несколько таблиц одной модели

Я пробовал это с помощью фиктивных классов в AppModel, который должен работать, но я получаю сообщение об ошибке, вызвавшей внутреннюю ошибку (ошибка 500). Я обнаружил, что существует проблема с соответствующим SQL-заявлением с не найденной строкой.

В AppModel:

class PostHood extends Post { 
    public $useTable = 'posts'; 
}; 

Этот код использует таблицу "cake_posts" из "класса Post расширяет AppModel". В контроллере я пытался получить PostHood как следующее:

$this->paginate['PostHood'] = array(
    'conditions' => array('OR' => array(stuff)), 
    'limit' => 5 
); 
$this->set('postsHood', $this->paginate('PostHood')); 

В представлении есть Еогеасп-цикл с использованием $ postsHood в $ пост. Возможно, у вас есть идея, спасибо заранее

EDIT 1: У меня есть уведомления об ошибках после изменения кода. Может быть, у вас есть идея, что делать. Изменение AppModel:

class PostHood extends AppModel { 
    var $name = 'Post'; 
    public $useTable = 'posts'; 
}; 

Контроллер:

$this->loadModel('PostHood'); 
$this->paginate = array(
    'conditions' => array('OR' => 
    array(
     array('AND' => array( 
     array('PostHood.ZIPCODE LIKE' => $userArea . '%'), 
      array('PostHood.ALTDATE >' => date("Y-m-d")), 
     array('PostHood.AGENT' => '0'), 
     array('PostHood.OWNER <>' => $this->UserAuth->getUserId()), 
     array('PostHood.PARENTID' => '0'), 
     array('PostHood.ACCEPTED' => '0') 
    )), [MORE AND ARRAYS] 
$this->set('postsHood', $this->paginate('PostHood')); 

Соответствующая ошибка в представлении:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Post.DATE' in 'order clause' 

SQL запросов: SELECT PostHood. id, PostHood. B/S, PostHood. H, PostHood. CITY, PostHood. MARKET, PostHood. DATE, PostHood. ALTDATE, PostHood. TIME, PostHood. INCOME, PostHood. ZIPCODE, PostHood. ALIAS, PostHood. VEHICLE, PostHood. DELIVERYAREA, PostHood. SPACE, PostHood. STREET, PostHood. HOUSENUMBER, PostHood. NAME, PostHood. CART, PostHood. TEL, PostHood. OWNER, PostHood. created, PostHood. modified, PostHood. AGENT, PostHood. EXTRADATA, PostHood. PARENTID, PostHood. BRATED, PostHood. SRATED, PostHood. REQUESTED, PostHood. ACCEPTED ОТ usr_web126986_4. cake_posts AS PostHood ГДЕ 1 = 1 ЗАКАЗАТЬ Post.DATE asc LIMIT 5

Очевидно, что Cake пытается получить данные с помощью «PostHood», но таблица «posts», которую я действительно хочу использовать, прослушивает «Post.field». Как я могу это исправить? Спасибо :)

ответ

0

Получил его работу с великолепными плагинами DataTables. Это переопределяет точечную разбивку и использует JSON для отображения результатов.

Для того, чтобы реализовать его в торт вам нужно

1.) компонент торт для интерпретации SQL-операторы: https://github.com/cnizzdotcom/cakephp-datatable

2.) плагин: http://www.datatables.net/index

3) осуществление:

$this->paginate = array(
    'fields' => array('Model.field1', 'Model.field2'), 
    'conditions' => array(stuff) 
); 
$response = $this->DataTable->getResponse(); 
$this->set('response', $response); 
$this->set('_serialize','response'); 
$encode = json_encode($response); 
$this->set('dataTablesData', $encode); 

Затем вы можете захватить данные на виду.

1

Вы должны попробовать что-то вроде этого:

$this->paginate = array(
    'conditions' => array('OR' => array(stuff)), 
    'limit' => 5 
); 
$this->set('postsHood', $this->paginate('PostHood')); 

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

+0

Hi Thorpe, это не работает. Мой вопрос очень похож на этот: http://stackoverflow.com/questions/2305839/cakephp-two-separate-paginations-of-the-same-model Я попытался выполнить последний ответ, но он не работает , – Karl

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