我有以下设置:
我希望在以下条件下执行$this->find
:
检索以下结果:
各种作业记录和属于作业的报价以及与报价相关的各种批次
这意味着我输入abc
和
abc
,我将显示该作业及其相关的报价和相关的批处理OR abc
,我将显示父作业及其所有相关报价和相关批次OR 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
和Quotation
,因此我会使用这两个模型之间的连接进行搜索,并且仅返回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',
)
);
然后使用这些选项执行find
。
有没有比我更好的方法?