【问题标题】:CakePHP eliminating null results from paginationCakePHP 从分页中消除空结果
【发布时间】:2012-02-01 00:44:37
【问题描述】:

我已经搜索过这个问题,但部分问题是我不确定如何简明扼要地描述我的问题。我在这里有两个相关的模型:应用程序和缺席。应用属于缺席,缺席有很多应用。这是应用程序的架构:

CREATE TABLE applications (
    id int unsigned AUTO_INCREMENT PRIMARY KEY,
    user_id int unsigned,
    absence_id int unsigned
);

这很简单。我想使用来自特定用户的应用程序对所有缺勤进行分页(我在缺勤控制器中执行此操作)。我可以接近这段代码:

absences_controller.php:

$this->paginate = array(
    'contain' => array(
        'Application' => array(
            'conditions' => array(
                'Application.user_id' => $viewer_id,
                //'NOT' => array('Application.id' => null),
            )
        ),
    )
);
$this->set('absences', $this->paginate());

这确实返回了我想要的缺勤,但它也返回了所有没有应用程序与之关联的缺勤。有没有办法在没有自定义查询的情况下做到这一点?我想保留我的应用程序 Cakey。您可以在代码中已注释掉的“NOT”行中看到我尝试去除 null Application 结果的尝试之一。

谢谢!

【问题讨论】:

    标签: cakephp pagination


    【解决方案1】:

    您正面临正常的 Containable 行为。

    您正在做的是检索所有缺席,如果 Application.user_id = $viewer_id 则加入应用程序。您不会返回与您的用户相关的缺勤。

    获得所需内容的最简单方法是从应用程序的角度检索数据并加入缺席模型。

    在 applications_controller.php 中

     $this->set('applications', $this->paginate('Application' => array('conditions' => array('Application.user_id' => $viewer_id))));
    

    【讨论】:

    • 我可以在缺席_controller.php 中使用它(更适合我的应用程序)。非常感谢!
    【解决方案2】:

    试试这个..

    $this->paginate = array('Application' => array('conditions' => 'Application.user_id' => $viewer_id));
    

    【讨论】:

    • 这似乎让我得到了与以前相同的结果。
    • 试试这个.. $this->paginate = array('Absence' => array('conditions' => 'Application.user_id' => $viewer_id));
    • 这会得到一个 SQL 错误。该查询在 WHERE 子句中有 Application.user_id,但它不加入 Application 表。
    【解决方案3】:

    试试:

    $this->paginate = array(
        'conditions' => array(
            'Absence.application_id >' => 0
        ),
        'contain' => array(
            'Application' => array(
                'conditions' => array(
                    'Application.user_id' => $viewer_id
                )
            ),
        )
    )
    

    【讨论】:

    • Absence 没有 application_id 因为它可以有很多;唯一的外键是 Application.absence_id。
    猜你喜欢
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多