CakePHP LEFT JOIN 排序问题

问题描述

我正在使用 cakePHP 2.x 版本,以下是我的数据网格视图和控制器,我希望区域和框都按用户排序。框可以排序,但是区域优先排序是有效的,然后当点击排序时,页面刷新但不排序。可能是什么原因?

<table class="index">
<thead>
    <tr>
        <th><?PHP echo $this->Paginator->sort('A.title','Area')?></th>
        <th><?PHP echo $this->Paginator->sort('B.title','Boxes')?></th>
        <th>Internal</th>
        <th>External</th>
    </tr>
</thead>
$this->paginate['contain'] = array();
$this->paginate['joins'] = array(
    array(
        'table' => 'a_table','alias' => 'A','type' => 'LEFT','conditions' => array(
            'A.key = B.id','A.status' => 'Active'
        )
    )
);

$conditions = array();
$this->paginate['fields'] = array('B.*','A.title');
$this->paginate['order'] = array('A.title','B.title');

if(!empty($this->request->data['SignalBox']))
{
    if($this->request->data['SignalBox']['Box'])
        $conditions['B.title LIKE'] = '%'.$this->request->data['SignalBox']['Box'].'%';

    if($this->request->data['SignalBox']['area'])
        $conditions['A.title'] = $this->request->data['SignalBox']['area'];
}

if($conditions)
    $this->paginate['conditions'] = $conditions;

$data = $this->paginate('B');

$this->set('data',$data);

解决方法

最终的解决方案是,更改模型 根据提交的排序列,

$model ='A';

if($this->request->param('named.sort')){
    $submittedModel = explode('.',$this->request->param('named.sort'));
    $model =$submittedModel [0];
}

然后更改 JOIN 查询并 $data = $this->paginate('B');

if(A)
{
   A JOIN query
}
else
{
   B JOIN query
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...