【问题标题】:CakePHP LEFT JOIN sorting issueCakePHP LEFT JOIN 排序问题
【发布时间】:2021-08-11 22:13:44
【问题描述】:

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

<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);

【问题讨论】:

    标签: php sorting cakephp pagination cakephp-2.0


    【解决方案1】:

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

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

    然后更改 JOIN 查询和 $data = $this-&gt;paginate('B');

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      相关资源
      最近更新 更多