/** Produce a TLORelationshipResult object **/ protected static function getRel(PDO $db, $relationship, TLO $obj, $type) { $query = self::sqlRead($relationship); $c_one = $relationship::relationOne(); $c_many = $relationship::relationMany(); $relname = TLO::transClassTable($relationship); switch ($type) { case self::TYPE_ONE: $c_obj = $c_many; $c_rel = $c_one; $rel_keys = array_map(function ($key) use($relname) { return TLO::developedColName($relname, 'key', $key); }, TLO::keyNames($c_rel)); $params = array(); foreach ($obj->getKeys($c_obj) as $key => $val) { $query->where('%s = ?', $key); $params[] = $val; } break; case self::TYPE_MANY: $c_obj = $c_one; $c_rel = $c_many; $rel_keys = TLO::keyNames($c_rel); $params = array(); foreach ($obj->getKeys($c_obj) as $key => $val) { $query->where('%s = ?', TLO::developedColName($relname, 'key', $key)); $params[] = $val; } break; default: throw new TLOException('Unexpected value for type: "%s"', $type); } if (!is_a($obj, $c_obj)) { throw new TLOException('Object of type "%s" is not a subclass of "%s"', get_class($obj), $c_obj); } return new TLORelationshipResult($db, TLO::execFetchClass($db, $relationship, $query, $params), $c_rel, $rel_keys); }