我意识到这个问题几乎遍布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'))); ?>
......它运作正常。所有Pagination链接,如第一个,下一个,数字等,也可以工作,并创建这样的链接:
本地主机/公司/ 20 /排序:Company.name/page:2
那么我在世界上如何为Company.City.name做这个(当我在它时,Company.City.Country.name!)目前它似乎忽略了我的'sort'参数。如果我打开调试,当我尝试按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' )
);
没有爱。它忽略了我的'order'参数。关于如何做到这一点的任何想法?
再次感谢您的回答。
答案 0 :(得分:3)
如果您定义了模型关联船,则不需要使用Company.City.name等。您可以直接使用City.name。
如果您要显示列表,那么您可以使用以下代码,而不是提供要对表数据进行排序的链接。
<?php echo $this->Paginator->sort('City.name', 'City Name');?>
请问它是否对您不起作用。