Cake PHP分页一个模型的多个表

时间:2013-05-22 21:46:30

标签: php database cakephp pagination

界, 多个表存在问题,这些表在同一页面上接收相同型号“Post”的条目。单击paginator-number时,应用程序将更改两个表的页面。

我在AppModel中使用虚拟类尝试了它应该可以工作,但是我收到一条错误,说明发生了内部错误(错误500)。我发现对应的SQL语句有一个找不到行的问题。

在AppModel中:

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

该代码使用“class Post extends AppModel”的表“cake_posts”。在控制器中,我试图像PostHood一样:

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

在视图中有一个使用$ postsHood作为$ post的foreach循环。 也许你有一个想法,提前谢谢:)

编辑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 PostHoodidPostHoodB/SPostHoodHPostHood。{ {1}},  CITYPostHoodMARKETPostHoodDATEPostHoodALTDATEPostHood,{{ 1}}。TIMEPostHoodINCOMEPostHoodZIPCODEPostHoodALIAS,{{1} }。PostHoodVEHICLEPostHoodDELIVERYAREAPostHoodSPACEPostHoodSTREETPostHoodHOUSENUMBERPostHoodNAMEPostHoodCARTPostHoodTEL。{{ 1}},PostHoodOWNERPostHoodcreatedPostHoodmodifiedPostHood。{{1} },AGENTPostHoodEXTRADATAPostHoodPARENTIDPostHoodBRATEDPostHood FROM SRATEDPostHood AS REQUESTED WHERE 1 = 1 ORDER BY PostHoodACCEPTED asc LIMIT 5

显然,Cake尝试使用“PostHood”获取数据,但实际上我想要使用的表“发布”是在收听“Post.field”。我该如何解决这个问题?谢谢:))

2 个答案:

答案 0 :(得分:1)

你应该尝试这样的事情:

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

我很好奇你为什么要构建扩展另一个模型的模型。

答案 1 :(得分: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);

然后你可以在视图中获取数据。