我意识到这个问题几乎遍布 StackOverflow,但似乎没有一个答案对我有用。
我的问题很简单。我只想列出按城市名称排序的公司:
class Company extends AppModel
public $recursive = 2;
public $belongsTo = array(
'City' => array(
'className' => 'City',
'foreignKey' => 'city_id'
)
);
class City extends AppModel {
public $useTable = 'cities';
public $belongsTo = 'Country';
public $hasMany = array(
'Company' => array(
'className' => 'Company',
'foreignKey' => 'city_id'
)
);
在公司页面上,因此在公司控制器中,我想做这样的事情:
$this->paginate = array(
'order' => array('Company.City.name' => 'ASC' ),
// or is it 'order' => array('Company->City.name' => 'ASC' ), ??
);
$companies = $this->paginate('Company');
在视图中,有一个链接可以将排序更改为按城市名称:
<?php echo $this->Html->link(__('Sort by City name'), array('controller' => 'companies', 'action' => 'index', '?' => array('sort' => 'Company.City.name'))); ?>
当我创建一个链接以将排序更改为公司模型中的一个字段时,比如(公司的)名称,我创建这样的链接:
<?php echo $this->Html->link(__('Sort by Company name'), array('controller' => 'companies', 'action' => 'index', '?' => array('sort' => 'Company.name'))); ?>
...它工作正常。并且所有的分页链接,比如第一个、下一个、数字等,也可以工作,并创建如下链接:
localhost/companies/20/sort:Company.name/page:2
那么,我到底如何才能为 Company.City.name 做到这一点(当我在它的时候,Company.City.Country.name!)目前它似乎忽略了我的“排序”参数。如果我打开调试,当我尝试按 Company.City.name 排序时,生成的 SQL 查询没有“order by”子句。
这让我发疯了,这似乎是一件很简单的事情。非常感谢您的帮助!
更新:嘿!那行得通!或者至少,我已经成功了一半!我能够在我的控制器中使用您的建议:
$this->paginate = array(
'limit' => 10,
'order' => array('City.name' => 'ASC' )
);
它有效!现在我正在尝试为 Country 做同样的事情,但它不起作用。我试过了:
$this->paginate = array(
'limit' => 10,
'order' => array('City.Country.name' => 'ASC' )
);
$this->paginate = array(
'limit' => 10,
'order' => array('City->Country.name' => 'ASC' )
);
而且没有爱。它忽略了我的“订单”参数。关于如何做到这一点的任何想法?
再次感谢您的有用回答。