Doctrine:连接表并不会将数据标记为已加载

时间:2010-02-16 18:55:48

标签: php doctrine

所以我有两张桌子:X和Y。

schema.yml看起来像:

X: 
  columns:
    something: { type: string(255), notnull: true }
    y_id: { type: integer, notnull: true }
  relations:
    Y: { onDelete: CASCADE, local: y_id, foreign: id, foreignAlias: xs }
Y:
  columns:
    something: { type: string(255), notnull: true }

在我的XTable中我有:

class XTable extends Doctrine_Table
{
    function getXesWithYs()
    {
        return $this->createQuery("x")->leftJoin("x.Y y")->execute();
    }
}

生成的查询实际上选择了x。*和y。*,但是当我尝试使用Y的数据时,它会对从Y中选择的每一行执行额外的查询,其中y.id = x.y_id。

所以,如果我这样做:

echo $results[0]->Y->something;

Doctrine将运行额外的查询再次获取Y的数据。

每Y行只发生一次。如果我再次使用它,它将不会第三次加载它,但如果我使用$result[1]的Y,我会得到另一个查询。

1 个答案:

答案 0 :(得分:1)

啊,教条懒惰加载最愚蠢或至少没有很好的记录。

似乎即使你像你一样加入某些东西,你也必须选择那些表格。像这样:

class XTable extends Doctrine_Table
{
    function getXesWithYs()
    {
        return $this->createQuery("x")->select('x.*, y.*')->leftJoin("x.Y y")->execute();
    }
}