mysql - Join is not populating the object graph as expected -
i have small misunderstanding in how joining in doctrine2 work. have pretty complex structure in our app , building management screens it.
the area of concern follows:
once of objects 'application' looks this:
class application
{ /** * list of supported statuses * * @var array */ private $statuses = array('released', 'expired');
/** * * @var integer $id * * @column(name="id", type="integer", columndefinition="int(10) unsigned") * @id * @generatedvalue(strategy="auto") */ private $id; /** * @var string * * @column(name="name", type="string", length=100) */ private $name; /** * @var customer * * @manytoone(targetentity="libraries\persona\entity\customer") * @joincolumn(name="customers_id", referencedcolumnname="id", nullable=true, columndefinition="int(10) unsigned") */ private $customer; /** * @var integer * * @column(name="partners_id", type="integer", nullable=true) */ private $partnerid; /** * @var string * * @column(name="appid", type="string", length=48) */ private $appid; /** * @var string * * @column(name="status", type="string", length=15) */ private $status; /** * @var \datetime * * @column(name="eventstartdate", type="date") */ private $eventstartdate; /** * @var \datetime * * @column(name="eventenddate", type="date") */ private $eventenddate; /** * @var string * * @column(name="timezone", type="string", length=45) */ private $timezone; /** * @manytoone(targetentity="libraries\application\entity\applicationtype", inversedby="applications") * @joincolumn(name="applicationtypes_id", referencedcolumnname="id") */ private $applicationtype; /** * @var integer * * @column(name="syncperiod", type="integer", length=10, nullable=true) */ private $syncperiod; /** * @var \datetime * * @column(name="lastsync", type="datetime", nullable=true) */ private $lastsync; /** * @var string * * @column(name="lastsyncstatus", type="string", length=127, nullable=true) */ private $lastsyncstatus; /** * @var string * * @column(name="syncscript", type="string", length=250, nullable=true) */ private $syncscript = '/var/www/quickstart/application/controllers/scripts/qdissync.php'; /** * @var integer * * @column(name="size", type="integer", length=10) */ private $size = 400; /** * @var text * * @column(name="metadata", type="text", nullable=true) */ private $metadata; /** * @var \datetime * * @column(name="metadatachangedtime", type="datetime", nullable=true) */ private $metadatachangedtime; /** * @var tinyint * * @column(name="issecure", type="smallint", length=1) */ private $issecure = 2; /** * @var integer * * @column(name="users_id", type="integer", nullable=true) */ private $userid; /** * @var string * * @column(name="singleeventappid", type="string", length=48, nullable=true) */ private $singleeventappid; /** * @var string * * @column(name="project_db", type="string", length=50) */ private $projectdb; /** * @var string * * @column(name="appname", type="string", length=12) */ private $appname; /** * @var boolean * * @column(name="mobilelog", type="boolean") */ private $mobilelog = false; /** * @var tinyint * * @column(name="eventtype", type="smallint", length=1) */ private $eventtype = 1; /** * @manytoone(targetentity="libraries\application\entity\project", inversedby="applications") * @joincolumn(name="project_id", referencedcolumnname="id") */ private $project; /** * @onetomany(targetentity="libraries\platform\entity\platform", mappedby="application") **/ private $platforms; /** * @var snapeventattributes * * @onetoone(targetentity="libraries\application\entity\snapeventattributes", mappedby="application") **/ private $snapeventattributes; //getters & setters }
one of related objects 'snapeventattributes':
class snapeventattributes
{ /** * * @var integer * * @column(name="id", type="integer", columndefinition="int(11)") * @id * @generatedvalue(strategy="auto") */ private $id;
/** * @var string * * @column(name="directselectid", type="string", length=10, nullable=true) */ private $directselectid; /** * @var string * * @column(name="description", type="text", nullable=true) */ private $description; /** * @var string * * @column(name="access", type="string", length=10, nullable=false) */ private $access; /** * @var string * * @column(name="status", type="string", length=10, nullable=false) */ private $status; /** * @var string * * @column(name="snapappversion", type="string", length=5, nullable=true) */ private $snapappversion; /** * @var string * * @column(name="pwd", type="string", length=250, nullable=true) */ private $password; /** * @var string * * @column(name="thumbnailurl", type="string", length=250, nullable=true) */ private $thumbnailurl; /** * @var string * * @column(name="location", type="string", length=45, nullable=true) */ private $location; /** * @onetoone(targetentity="libraries\application\entity\application", inversedby="snapeventattributes") * @joincolumn(name="applications_id", referencedcolumnname="id", unique=true, nullable=false) */ private $application; // getters & setters
}
in 1 of our work flows need join these 2 bunch of additional joins , got this:
$qb = $this->createquerybuilder('e'); $qb->innerjoin('e.applicationtype', 'et', expr\join::with, 'et.mobileevent = :mobileevent , et.snapapp = :snapapp , et.snapevent = :snapevent'); $qb->innerjoin('e.snapeventattributes', 'attrs'); $qb->innerjoin('e.project', 'p'); $qb->innerjoin('p.applications', 'a'); $qb->innerjoin('a.applicationtype', 'at', expr\join::with, 'at.mobileevent = :vmobileevent , at.snapapp = :vsnapapp , at.snapevent = :vsnapevent'); $qb->leftjoin('e.customer', 'cust'); $qb->leftjoin('p.partner', 'partn'); $qb->setparameters(array( 'mobileevent' => false, 'snapapp' => false, 'snapevent' => true, 'vmobileevent' => false, 'vsnapapp' => true, 'vsnapevent' => false, )); return $qb;
all logic works fine, once execute query:
$qb->getquery()->getresult();
the main query getting executed expected automatically doctrine executes bunch of queries snapeventattributes objects:
select t0.id id1, t0.directselectid directselectid2, t0.description description3, t0.access access4, t0.status status5, t0.snapappversion snapappversion6, t0.pwd pwd7, t0.thumbnailurl thumbnailurl8, t0.location location9, t0.applications_id applications_id10 snapeventattributes t0 t0.applications_id = ?
what missing? reason behavior?
thanks, a.
get repository
controller
$snapevents = $this->em->snapevents ( 'entity\snapeventattributes' )->findall (); $data ['snapevents '] = $snapevents ;
then on view
view
foreach ($snapevents $sanpevent) { echo "<tr>". "<td>" . $sanpevent->getappliction()->getapplicationtype() . "</td>". "<td>" . $sanpevent->getappliction()->getcutomer() . "</td>". }
like keep on calling u want since u have joined columns @ model
Comments
Post a Comment