我有三个表ServerScans
,QueuedJobs
,ReportMalware
ReportMalware
有一列type
,其中包含mail
,abc
等值。
我正在查询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',
],
]);
有没有办法实现这一点并根据某些过滤条件包含两次相同的模型?
答案 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');
}
}