我将 Symfony 2 与 propelorm/PropelBundle(Propel 1.6)和 MySQL(带有声明的外键的 InnoDB)一起使用,并且我正在使用自定义 SQL,如使用自定义 SQL水合推进对象集合部分所示,如下所示:
$con = Propel::getConnection(VerbNounPeer::DATABASE_NAME);
$sql = "SELECT verb_noun.*, verb.* FROM verb_noun"
." JOIN verb ON verb_noun.verb_id = verb.id";
$stmt = $con->prepare($sql);
$stmt->execute();
$formatter = new PropelObjectFormatter();
$formatter->setClass('Company\SiteBundle\Model\VerbNoun');
$verb_nouns = $formatter->format($stmt);
注意:这不是实际的查询——我放了一个简单的例子来说明需求。我的实际查询更复杂,因此需要使用“自定义 SQL”而不是推进方法。
我无法一次性将连接表的列水合到推进对象集合中。连接表的列(“动词”)仅在需要时通过对数据库的其他查询加载到视图中(我相信这称为延迟加载,我不想要)。有没有办法在上述初始查询中将推进对象集合($verb_nouns)与连接表('verb')的列混合,以消除以后对数据库的大量查询?
实际上,使用上面的代码和下面的代码(在 Twig 的视图文件中)会为 foreach 语句中的每个循环生成一个数据库连接:
{% for verb_noun in verb_nouns %}
<li>{{ verb_noun.NounId }}. {{ verb_noun.verb.Name }}</li>
{% endfor %}