Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP:查询缺少关联记录_Cakephp - Fatal编程技术网

CakePHP:查询缺少关联记录

CakePHP:查询缺少关联记录,cakephp,Cakephp,我正在开发一个CakePHP应用程序,这是一个应用程序——比如,一个上大学的应用程序。它由一系列表单组成,每个表单都存储在一个数据库表中,还有一些管理工具 将所有表绑定在一起的是一个应用程序表,它在应用程序上存储元数据。构成潜在学生申请表的所有表格都属于申请表——换句话说,它们是一对一的关系 应用程序允许人们在完成任务的过程中走开,然后再回来。因此,管理界面因不完整的应用程序而变得杂乱无章。界面的用户只希望看到在某一点之前已经完成的不完整的应用程序。他们需要的信息来自某个表中的必填表单字段,因此

我正在开发一个CakePHP应用程序,这是一个应用程序——比如,一个上大学的应用程序。它由一系列表单组成,每个表单都存储在一个数据库表中,还有一些管理工具

将所有表绑定在一起的是一个应用程序表,它在应用程序上存储元数据。构成潜在学生申请表的所有表格都属于申请表——换句话说,它们是一对一的关系

应用程序允许人们在完成任务的过程中走开,然后再回来。因此,管理界面因不完整的应用程序而变得杂乱无章。界面的用户只希望看到在某一点之前已经完成的不完整的应用程序。他们需要的信息来自某个表中的必填表单字段,因此,如果一个人完成了该步骤,则会显示所需的信息

所有这一切都意味着我需要一种方法来过滤掉那些在与
应用程序相关联的一个表中缺少记录的应用程序。实现这一点的简单方法是在它们从数据库返回后过滤掉它们,事实上,这是我第一次尝试的。但是,我不仅仅是查询,我使用的是分页器,所以在返回结果集后过滤结果集会弄乱分页。我需要能够在
$paginate
配置数组的
条件
参数中过滤掉它

以下是相关的控制器代码,包括当前的过滤机制,该机制可以工作,但会干扰分页:

var $paginate = array(
        'limit'=>100,
        // We want apps that are complete at the top of the list, ordered by the date they were finished.
        // We want to order incomplete apps by dateStarted because they don't have a dateFinished yet.
        'order'=>array('stepsCompleted'=>'desc', 'dateFinished'=>'desc', 'dateStarted'=>'desc'),
    );

function admin_index() {
    $this->Nsapp->recursive = 0;
    $this->Nsapp->unbindModel(array('hasOne'=>array('Essay', 'Religion', 'SpecialNeed')), false);
    $nsapps = $this->paginate('Nsapp');
    // Filter out the apps that are too incomplete to do anything about
    foreach ($nsapps as $key => $nsapp)  {
        // This fairly horrible conditional says, "If they provided us with at least one name and an email, do not filter them out"
        if ((empty($nsapp['Person']['name1']) &&
             empty($nsapp['Person']['name2']) &&
             empty($nsapp['Person']['surName'])) ||
            empty($nsapp['Person']['email']))
        {
            unset($nsapps[$key]);
        }
    }

    $this->set('nsapps', $nsapps);
}
因此,总结并重申:我当前的分页查询为没有记录的关联表返回一个空字段数组。我需要一种方法来删除缺少特定关联记录的结果,不是通过后期筛选(因为这会影响分页),而是通过
$paginate
配置数组中的conditions参数,但我不知道如何查询缺少记录的情况


提前感谢您的帮助

执行数据库查询时,请尝试设置筛选器

function admin_index() {
    $this->Nsapp->recursive = 0;
    $this->Nsapp->unbindModel(array('hasOne'=>array('Essay', 'Religion', 'SpecialNeed')), false);
    $nsapps = $this->paginate('Nsapp');
    $this->paginate['Nsapp']['conditions'] = 
          array("not"=>array("Person.name1"=>null, "Person.name2"=>null));
    pr($this->paginate('Nsapp'));

    $this->set('nsapps', $this->paginate('Nsapp'));
}

也许是某种形式的左外连接?我建议只处理SQL—甚至修改您的问题,使其只包含SQL。一旦你有工作,它应该很容易端口到蛋糕。如果你有问题,把它作为一个新问题发布。