Cakephp 如何在获取父模型时对子模型进行查询搜索?

Cakephp 如何在获取父模型时对子模型进行查询搜索?,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我有以下设置: 这份工作有很多引文 报价单属于工作 报价单批量中有许多报价单 Batch在Batch中有许多引用 我想在以下条件下执行$this->find: Job.name或 QUOTE.QUOTE\U编号或 QUOTE.site\u文本 正在检索以下结果: 属于作业的各种作业记录和报价单以及与报价单关联的各种批次 意思是说如果我输入abc和 如果Job.name与abcabc匹配,我将显示该Job及其关联的报价单和关联的批或批 如果QUOTE.QUOTE\u编号与abcabc匹配,我

我有以下设置:

  • 这份工作有很多引文
  • 报价单属于工作
  • 报价单批量中有许多报价单
  • Batch在Batch中有许多引用
  • 我想在以下条件下执行
    $this->find

    • Job.name或
    • QUOTE.QUOTE\U编号或
    • QUOTE.site\u文本
    正在检索以下结果:

    属于作业的各种作业记录和报价单以及与报价单关联的各种批次

    意思是说如果我输入abc和

    • 如果Job.name与abc
      abc
      匹配,我将显示该Job及其关联的报价单和关联的批或批
    • 如果QUOTE.QUOTE\u编号与abc
      abc
      匹配,我将显示父作业及其所有关联的报价单和关联的批次或批次
    • 如果Quotence.site_文本匹配
      abc
      ,我将显示父作业及其所有关联的报价和关联的批次
    请告知

    更新:

    我让它工作。但本质上,我使用了两次
    find
    joins

    首先,我这样做:

         $options =  array(
            'conditions'    => $conditions,
            'order'     => array(
                'Job.id' => 'DESC',
            ),
            'fields'    => $fields
        );
    
        $joins = array(
            array('table' => 'quotations',
                'alias' => 'Quotation',
                'type' => 'LEFT',
                'conditions' => array(
                    'Quotation.job_id = Job.id',
                )
            )
        );
        $options['joins'] = $joins;
    
        $results = $this->find('all', $options);
    
    因为我的条件主要与
    Job
    quote
    有关,所以我使用这两个模型之间的连接进行搜索,只返回
    Job.id

    之后,我检查是否有符合条件的作业,然后执行另一个查找。这一次,涉及到其他相关模型

        if ($results) {
            $ids = Hash::extract($results, '{n}.Job.id');
        } else {
            $ids = array('Job.id' => -1000); // put a fake id
        }
    
        $options['conditions'] = array('Job.id' => $ids);
        $joins[] = array('table' => 'quotations_in_batches',
                'alias' => 'QuotationInBatch',
                'type' => 'LEFT',
                'conditions' => array(
                    'Quotation.id = QuotationInBatch.quotation_id',
                )
            );
        $joins[] = array('table' => 'batches',
                'alias' => 'Batch',
                'type' => 'LEFT',
                'conditions' => array(
                    'Batch.id = QuotationInBatch.batch_id',
                )
            );
    
    然后使用这些选项执行查找


    有比我的更好的方法吗?

    检查医生:谢谢。我已经更新了我的问题。