SELECT pcodes.seats, COUNT(preg.accesscode_id) as seatsused FROM passport_accesscoderegistry as preg LEFT JOIN passport_accesscodes as pcodes ON preg.accesscode_id = pcodes.id WHERE accesscode_id = 4
<model version="1.1" package="passport" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="passport" phpdoc-subpackage="model">
<object class="passportAccessCodes" table="passport_accesscodes" extends="xPDOSimpleObject">
<field key="accesscode" dbtype="varchar" precision="25" phptype="string" null="false" default="" />
<field key="seats" dbtype="smallint" precision="4" attributes="unsigned" phptype="integer" null="false" default="0" />
[...]
<index alias="accesscode" name="accesscode" primary="false" unique="true" type="BTREE">
<column key="accesscode" length="" collation="A" null="false" />
</index>
<composite alias="passportAccessCodeRegistry" class="passportAccessCodeRegistry" local="id" foreign="accesscode_id" cardinality="many" owner="local" />
</object>
<object class="passportAccessCodeRegistry" table="passport_accesscoderegistry" extends="xPDOSimpleObject">
<field key="accesscode_id" dbtype="smallint" precision="5" attributes="unsigned" phptype="integer" null="false" default="" />
<field key="user_id" dbtype="smallint" precision="5" attributes="unsigned" phptype="integer" null="false" default="" />
[...]
<aggregate alias="passportAccessCodes" class="passportAccessCodes" local="accesscode_id" foreign="id" cardinality="one" owner="foreign" />
<aggregate alias="modUser" class="modUser" local="user_id" foreign="id" cardinality="one" owner="foreign" />
</object>
</model>
$q = $this->modx->newQuery('passportAccessCodeRegistry');
$q->select('seats, COUNT(AC.accesscode_id) as seatsused');
$q->leftJoin('passportAccessCodes','AC');
$q->where(array('accesscode_id'=>$accesscode_id));
$q->prepare();
$q->stmt->execute();
$rs = $c->stmt->fetchColumn();
$val1 = $rs->get('col1')
$val2 = $rs->get('col2')
This question has been answered by multiple community members. See the first response.
$q = $modx->newQuery('passportAccessCodeRegistry');
$q = $this->modx->newQuery('passportAccessCodeRegistry');
$q->select(array(
'seats, COUNT(AC.accesscode_id) as seatsused',
));
$q->leftJoin('passportAccessCodes','passportAccessCodes','passportAccessCodeRegistry.id = passportAccessCodes.id');
$q->where(array(
'accesscode_id'=>$accesscode_id
));
$results = $modx->getIterator('passportAccessCodeRegistry', $q);
//Uncomment this to check what it would look like in plain SQL and debug
//echo $select->toSql();
//and then iterate through it
$q = $this->modx->newQuery('passportAccessCodeRegistry');
$q->select(array(
'seats, COUNT(accesscode_id) as seatsused',
));
$q->rightJoin('passportAccessCodes','passportAccessCodes','passportAccessCodeRegistry.accesscode_id = passportAccessCodes.id');
$q->where(array(
'accesscode_id'=>$id
));
$results = $this->modx->getIterator('passportAccessCodeRegistry', $q);
foreach($results as $result){
$seats = $result->get('seats');
$used = $result->get('seatsused');
}