Doktrini: Bir tablo Katılma yüklü olarak verileri işaretler değil

1 Cevap php

X ve Y.: Ben iki tablo var

Schema.yml gibi görünüyor:

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 }

Ve benim XTable ben var:

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

Oluşturulan sorgu *. Hem select x aslında yapar ve y. *, Ama Y verilerini kullanarak çalıştığınızda, bu Y y.id = x.y_id seçerek her satır için ekstra bir sorgu gerçekleştirir.

Bu yüzden eğer yaparsam:

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

Doktrin tekrar Y verileri getiriliyor ekstra bir sorgu çalışacaktır.

Bu sadece bir kez Y satıra olur. Ben tekrar kullanmak eğer bunu bir 3. defa yük olmayacak, ama ben $result[1] 's Y kullanırsanız, başka bir sorgu olsun.

1 Cevap

Ah en aptal ya da en azından çok iyi belgelenmiş değil de doktrin tembel yükleme.

Bu size yapmış gibi bir şey katılmak bile ayrıca bu tabloları seçmeniz gerekir gibi görünüyor. Şöyle:

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