【问题标题】:CakePHP Pagination with a third-level modelCakePHP 分页与三级模型
【发布时间】:2011-09-29 03:38:44
【问题描述】:

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

              )

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

【问题讨论】:

    标签: cakephp pagination models


    【解决方案1】:

    Cake 并不像某些 SQL 通常那样一直连接表,而是执行选择,然后 foreach 来自一个查询的行,并为循环的每次迭代执行查找。

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

    Cake 可能正在加载相关模型的 AppModel 实例。您可以使用 pho 方法 get_class iirc 进行检查。确保没有任何东西是应用模型,它应该都是您创建的实际类。

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

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

    【讨论】:

    • 我已经运行了 SQL 调试器,它正在运行正确的查询。当我打开 Containable 时,我看到大型“joined”查询正在运行,然后是其他查询以获取州名称——就像我想的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2013-11-22
    • 2013-08-21
    • 2014-08-04
    • 2011-11-07
    • 2010-12-29
    相关资源
    最近更新 更多