Sho*_*lis 4 php mysql doctrine symfony1 symfony-1.4
架构.yml:
JobeetCategory:
actAs: { Timestampable: ~ }
columns:
name: { type: string(255), notnull: true, unique: true }
JobeetJob:
actAs: { Timestampable: ~ }
columns:
category_id: { type: integer, notnull: true }
name: { type: string(255) }
relations:
JobeetCategory: { onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: JobeetJobs }
Run Code Online (Sandbox Code Playgroud)
动作.类:
public function executeIndex(sfWebRequest $request)
{
$this->jobeet_job_list = Doctrine::getTable('JobeetJob')
->createQuery('a')
->execute();
}
Run Code Online (Sandbox Code Playgroud)
和模板:
<table>
<?php foreach ($jobeet_job_list as $jobeet_job): ?>
<tr>
<td><?php echo $jobeet_job->getcategory_id() ?></td>
<td><?php echo $jobeet_job->getName() ?></td>
</tr>
<?php endforeach; ?>
</table>
Run Code Online (Sandbox Code Playgroud)
这些模板仅生成 2 个数据库查询。还行吧。但如果我这样做:
<table>
<?php foreach ($jobeet_job_list as $jobeet_job): ?>
<tr>
<td><?php echo $jobeet_job->getJobeetCategory()->getName() ?></td>
<td><?php echo $jobeet_job->getName() ?></td>
</tr>
<?php endforeach; ?>
</table>
Run Code Online (Sandbox Code Playgroud)
我在数据库中有 100 个 JobeetJob,然后生成了 102 个数据库查询!这太多了!可以减少这个吗?
您当前正在“延迟加载”JobeetCategory对象。如果您知道必须多次执行此操作,则效率很低。您应该对初始查询进行联接:
$this->jobeet_job_list = Doctrine::getTable('JobeetJob')
->createQuery('a')
->leftJoin('a.JobeetCategory c')
->execute();
Run Code Online (Sandbox Code Playgroud)
这意味着将从数据库中检索所有相关的 JobeetCategory 对象并立即进行水化,因此您不必稍后延迟加载它们。这应该会让您减少到 2 个查询。
| 归档时间: |
|
| 查看次数: |
2963 次 |
| 最近记录: |