2

I have the following Entities. First and foremost: the design derived from a legacy DB and it has been semplified here for clarity shake.

enter image description here

What I would like to do is selecting all the widgets along with their varsSelection populated (in this very moment Widget only contains PhyVarSelection instances so we can focus on them) which should have teir phyVar hydrated. Phyvar must not be populated with its ewCfgVar property.

I'm trying to do it by using DQL. I succeeded to select all the widgets and their relative varsSelection, but I'm not able to populate their relative phyVar. Is that possible? Here is the DQL I'm using:

        $sql = <<<EOS
        SELECT wid, partial phyvarsel.{id, phyVar, start}
        FROM Belka\\TsBundle\\Entity\\Widget wid
        LEFT JOIN Belka\\TsBundle\\Entity\\PhyVarSelection phyvarsel WITH wid.id = phyvarsel.widget
        LEFT JOIN Belka\\TsBundle\\Entity\\PhyVar phyvar WITH phyvarsel.phyVar = phyvar.id
EOS;

        $query = $this->getEntityManager()->createQuery($sql);

If I dump the result, Widget and varsSelection are correctly populated, but PhyVarSelection::phyVar is set to NULL.

The query DQL it generates is actually correct, and if I query it I get all the PhyVar's properties:

die(var_dump($query->getSQL()));

It generates:

SELECT a0_.id AS id0, a0_.title AS title1, a0_."order" AS order2, a0_.span_cols AS span_cols3, a0_.description AS description4, a1_.id AS id5, a1_.start AS start6, a2_.id AS id7, a0_.part_of_section AS part_of_section8, a1_.vartype AS vartype9, a1_.part_of_widget AS part_of_widget10, a1_.phy_var_sel AS phy_var_sel11, a2_.vartype AS vartype12, a2_.part_of_phy_meter AS part_of_phy_meter13, a2_.varname AS varname14, a2_.id_device AS id_device15 FROM app_t.widget a0_ LEFT JOIN app_t.var_selection a1_ ON (a0_.id = a1_.part_of_widget) AND a1_.vartype IN ('phy') LEFT JOIN app_t.variable a2_ ON (a1_.phy_var_sel = a2_.id) AND a2_.vartype IN ('phy');

I don't paste here the Entities' code but if you need it let me know with a comment below and I will update the question.

Update

I've also tried the following:

        $sql2 = <<<EOS
        SELECT phyvarsel, phyvar
        FROM Belka\\TsBundle\\Entity\\PhyVarSelection phyvarsel
        LEFT JOIN Belka\\TsBundle\\Entity\\PhyVar phyvar
        WHERE phyvarsel.id = :phyvarselid
EOS;


        $query2 = $this->getEntityManager()->createQuery($sql2);
        $query2->setParameter('phyvarselid', '0');
        $query2->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);
        $varSel = $query2->getResult();

again, in this case I get PhyVarSelection but its attribute phyVar is still set to NULL.

Bertuz
  • 2,390
  • 3
  • 25
  • 50

0 Answers0