Пример #1
0
 /** 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);
 }