我在CakePHP 1.2应用程序中有以下模型:
class Equipment extends AppModel {
var $name = 'Equipment';
var $belongsTo=array("City");
///
}
我的城市模型看起来像这样:
class City extends AppModel {
var $name = 'City';
var $belongsTo=array("State");
///
}
我没有在EquipmentController上做任何特别的事情 - 只是使用Paginator获取所有设备。
所以当我尝试在视图中实现这样的分页时:
<th><?php echo $paginator->sort('Equipment',"Equipment.name");?></th>
<th><?php echo $paginator->sort('City',"City.name");?></th>
<th><?php echo $paginator->sort('State',"State.name");?></th>
我可以按设备名称和城市名称排序,但按州名排序可以通过City.id给出一个排序列表 - 而不是State.name。我尝试过使用City.State.name,但这给了我相同的结果。我将两个模型的“递归”属性更改为“2”,结果相同。
);
为什么这不起作用?谁能给我一个解决方法或告诉我我做错了什么?
编辑我忘了说我尝试了Containable,但也没用。我就是这样设置的:
$this->paginate = array(
"conditions" => array("Equipment.expire_time >"=>date("Y-m-d H:i:s"),
"Equipment.is_active"=>true
),
'limit' => 25,
'order' => array(
'Equipment.available_time' => 'asc',
),
'contain'=>array(
"City"=>array(
"fields"=>array("id","name"),
"State"=>array("fields"=>"name")),
)
我看到正确的查询正在运行,但仍然可以按状态排序
答案 0 :(得分:0)
Cake不像一些SQL通常一样连接表,而是执行select,然后foreach是一个查询中的行,并为循环的每次迭代执行查找。
安装类似调试工具包的东西,以便您可以看到正在执行的SQL。如果是这种情况在google上搜索“cakephp deep finding”,那么有几种方法可以做到这一点,其中一种方法是强制hasOne加入关系。
Cake可能正在加载相关模型的AppModel实例。你可以用pho方法get_class iirc来检查这个。确保没有什么是应用模型,它应该都是您创建的实际类。
如果查询不多,您需要调查已创建的关系。 (虽然怀疑这个,其他2个更可能是原因)