CakePHP分页与第三级模型

时间:2011-03-22 19:29:17

标签: cakephp pagination models

我在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")),

              )

我看到正确的查询正在运行,但仍然可以按状态排序

1 个答案:

答案 0 :(得分:0)

Cake不像一些SQL通常一样连接表,而是执行select,然后foreach是一个查询中的行,并为循环的每次迭代执行查找。

安装类似调试工具包的东西,以便您可以看到正在执行的SQL。如果是这种情况在google上搜索“cakephp deep finding”,那么有几种方法可以做到这一点,其中一种方法是强制hasOne加入关系。

Cake可能正在加载相关模型的AppModel实例。你可以用pho方法get_class iirc来检查这个。确保没有什么是应用模型,它应该都是您创建的实际类。

如果查询不多,您需要调查已创建的关系。 (虽然怀疑这个,其他2个更可能是原因)

编辑... How do I filter deep associations in CakePHP