public static function loadFor($linkClass, DatabaseObject $for)
 {
     assert(class_exists($linkClass));
     assert(is_subclass_of($linkClass, __CLASS__));
     if (!isset($for->id)) {
         throw new InvalidArgumentException('unsaved DatabaseObject');
     }
     $database = $for->getDatabase();
     $meta = DatabaseObjectLinkMeta::forClass($linkClass, $for->_db);
     $data = array();
     if (is_a($for, $meta->getFromClass())) {
         $sql = $meta->getSQL('link_load_from');
         $data['from'] = $for;
         $other = 'to';
         $otherClass = $meta->getToClass();
     } elseif (is_a($for, $meta->getToClass())) {
         $sql = $meta->getSQL('link_load_to');
         $data['to'] = $for;
         $other = 'from';
         $otherClass = $meta->getFromClass();
     } else {
         throw new InvalidArgumentException('invalid DatabaseObject, expecting a ' . $meta->getFromClass() . 'or a ' . $meta->getToClass());
     }
     $otherId = null;
     $list = $database->execute($sql, $for->id);
     $list->bindColumn(1, $otherId);
     $i = 1;
     foreach (array_merge($meta->getAdditionalKey(), $meta->getAutomaticColumns()) as $column) {
         $data[$column] = null;
         $list->bindColumn(++$i, $data[$column]);
     }
     $r = array();
     $call = array($linkClass, 'factory');
     while ($list->fetch()) {
         $data[$other] = DatabaseObject::load($otherClass, $otherId);
         array_push($r, call_user_func($call, $data));
     }
     return $r;
 }