2

我意识到这个问题几乎遍布 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' )
    );

而且没有爱。它忽略了我的“订单”参数。关于如何做到这一点的任何想法?

再次感谢您的有用回答。

4

1 回答 1

3

如果定义了模型关联船,则不需要使用 Company.City.name 等,直接使用 City.name 即可。

如果您要显示一个列表,那么您可以使用以下代码,而不是提供您想要对表格数据进行排序的链接。

<?php echo $this->Paginator->sort('City.name', 'City Name');?>

请询问它是否不适合您。

于 2012-07-16T08:21:00.840 回答