cakephp 3包含相同的模型两次,具有不同的条件,没有关联

时间:2017-04-25 09:08:52

标签: cakephp model-associations cakephp-3.4

我有三个表ServerScansQueuedJobsReportMalware

ReportMalware有一列type,其中包含mailabc等值。

我正在查询ServerScans

$scan = $this->ServerScans->get($id, [
  'contain' => [
     'QueuedJobs',
     'QueuedJobs.ReportMalware',
  ],
]);

并在视图中使用for循环将

中的恶意软件报告分成两组
<h2>Mail report</h2>
<?php foreach($scan->queued_jobs->report_malware as $m): ?>
   <?php if ($m->type == 'mail'): ?>
       <?= $m->comment ?>
   <?php endif; ?>
<?php endforeach;?>

<h2>Abc report</h2>
<?php foreach($scan->queued_jobs->report_malware as $m): ?>
   <?php if ($m->type == 'abc'): ?>
       <?= $m->comment ?>
   <?php endif; ?>
<?php endforeach;?>

这将需要更多时间来执行。

我想要的是保持它像

一样
$scan = $this->ServerScans->get($id, [
  'contain' => [
     'QueuedJobs',
     'QueuedJobs.ReportMalware.mail',
     'QueuedJobs.ReportMalware.abc',
  ],
]);

有没有办法实现这一点并根据某些过滤条件包含两次相同的模型?

1 个答案:

答案 0 :(得分:2)

是的,你可以这样做。请参阅文档here

  

可以多次使用同一个表来定义不同类型的表   关联。例如,考虑要分离的情况   批准的评论和尚未审核的评论:

以下是官方文档中的示例:

class ArticlesTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasMany('Comments')
            ->setConditions(['approved' => true]);

        $this->hasMany('UnapprovedComments', [
                'className' => 'Comments'
            ])
            ->setConditions(['approved' => false])
            ->setProperty('unapproved_comments');
    }
}