【问题标题】:HABTM Paginate Sorting not working?HABTM 分页排序不起作用?
【发布时间】:2014-02-17 05:11:53
【问题描述】:

我对蛋糕的分页和排序有疑问。我可以使用第一个表进行排序,但如果我尝试使用第二个表进行排序,则不能。

我有以下表格(以及相应的模型): 用户:id,用户名 user_companies:id、user_id、company_id 公司:身份证、姓名

所以这工作得很好:

$this->User->find("all");

分页也可以正常工作:

$this->Paginator->settings = array('sort'=>'User.username');
$this->Paginator->paginate();

但如果我尝试按公司名称排序,则会出现错误:

$this->Paginator->settings = array('sort'=>'Company.name');
$this->Paginator->paginate();

错误:SQLSTATE[42S22]:找不到列:1054 未知列 '订单子句' SQL 查询中的 'Company.name': SELECT User.id, User.email, User.username, User.password, User.role, User.created, User.modified FROM cakeblog.users AS User 其中 1 = 1 ORDER BY Company.name asc LIMIT 20

为什么这不起作用?

我的用户模型 HABTM 如下所示:

public $hasAndBelongsToMany = array(
    'Company'=>array(
        'with'=>'UserCompanies'
        )
    );

在公司:

public $hasAndBelongsToMany = array(
    'User' => array(
        'with' => 'UserCompanies',
        )
    );

没有排序的默认查询是:(是,因为tehre实际上是两个查询):

SELECT `User`.`id`, `User`.`email`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`created`, `User`.`modified` FROM `cakeblog`.`users` AS `User` WHERE 1 = 1 LIMIT 20

查询2:

SELECT `Company`.`id`, `Company`.`name`, `CompaniesUser`.`id`, `CompaniesUser`.`user_id`, `CompaniesUser`.`company_id` FROM `cakeblog`.`companies` AS `Company` JOIN `cakeblog`.`companies_users` AS `CompaniesUser` ON (`CompaniesUser`.`user_id` IN (14, 16, 17) AND `CompaniesUser`.`company_id` = `Company`.`id`)

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    我最终创建了两个连接。现在它按预期工作,我可以使用 Company.name 或任何其他字段进行排序:

        $joins = array();
        $joins[] = array(
            'table'=>'companies_users',
            'alias'=>'CompanyUser',
            'type'=>'LEFT',
            'conditions'=>array(
                'CompanyUser.user_id = User.id'
                )
            );
    
        $joins[] = array(
            'table'=>'companies',
            'alias'=>'Company',
            'type'=>'LEFT',
            'conditions'=>array(
                'CompanyUser.company_id = Company.id')
            );
    
        $this->Paginator->settings = array('sort'=>'Company.name', 'joins'=>$joins);
        $x = $this->paginate();
        debug($x);
    

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多