在分页中加入两个模型
Joining two models in a paginate
我想在控制器中加入两个表..
分页模型也有很多条件,但我想在这里简化它。
$Table = $this->Table->query('
SELECT Table.id FROM Table
INNER JOIN TableA ON Table.id = TableA.table_id
INNER JOIN TableA.Table_id = TabelB.id
WHERE
IFNULL(Table.x,0) <> 0
GROUP BY Table.id
HAVING COUNT(*) > 1');
$this->paginate = array(
'paramType' => 'querystring'
,'joins' => $Table
)
);
我对 Cake 很满意,更多来自 SQL 背景,但这可以在控制器中完成还是应该在模型中完成?
$UserId = $this->Auth->user(id);
$this->Rate->bindModel(array('belongsTo'=>array('Vehicle'=>array('className'=>'Vehicle','foreignKey'=>'vehicle_id'),),),false);
$this->paginate = array('conditions'=>array('Rate.user_id'=>$UserId),
'order' => array('Rate.created DESC'),
'limit' =>'2'
);
$rating = $this->paginate('Rate');
正如我在 "Controller pagination with a subquery" 中的一个相同问题中回答的,这里是这个问题的相同答案
$this->paginate = array(
'paramType' => 'querystring',
'joins' => array(
array(
'table' => '(SELECT Table.id
FROM Table
INNER JOIN TableA ON Table.id = TableA.Table_id
INNER JOIN TableB ON TableA.TableB_id = TableB.id
WHERE
1 = 1
GROUP BY Table.id
HAVING COUNT(*) = 1)'
'alias' => 'Table_x',
'type' => 'INNER',
'conditions' => array('Table_x.id = Table.id')
)
)
);
$Table = $this->paginate();
我想在控制器中加入两个表..
分页模型也有很多条件,但我想在这里简化它。
$Table = $this->Table->query('
SELECT Table.id FROM Table
INNER JOIN TableA ON Table.id = TableA.table_id
INNER JOIN TableA.Table_id = TabelB.id
WHERE
IFNULL(Table.x,0) <> 0
GROUP BY Table.id
HAVING COUNT(*) > 1');
$this->paginate = array(
'paramType' => 'querystring'
,'joins' => $Table
)
);
我对 Cake 很满意,更多来自 SQL 背景,但这可以在控制器中完成还是应该在模型中完成?
$UserId = $this->Auth->user(id);
$this->Rate->bindModel(array('belongsTo'=>array('Vehicle'=>array('className'=>'Vehicle','foreignKey'=>'vehicle_id'),),),false);
$this->paginate = array('conditions'=>array('Rate.user_id'=>$UserId),
'order' => array('Rate.created DESC'),
'limit' =>'2'
);
$rating = $this->paginate('Rate');
正如我在 "Controller pagination with a subquery" 中的一个相同问题中回答的,这里是这个问题的相同答案
$this->paginate = array(
'paramType' => 'querystring',
'joins' => array(
array(
'table' => '(SELECT Table.id
FROM Table
INNER JOIN TableA ON Table.id = TableA.Table_id
INNER JOIN TableB ON TableA.TableB_id = TableB.id
WHERE
1 = 1
GROUP BY Table.id
HAVING COUNT(*) = 1)'
'alias' => 'Table_x',
'type' => 'INNER',
'conditions' => array('Table_x.id = Table.id')
)
)
);
$Table = $this->paginate();