Example #1
0
 /**
  * @param $modelClassName
  * @param $attributeModelClassName
  * @return string
  * @throws NotSupportedException
  */
 private function processFromJoinsForAttributeThatIsCastedUp($modelClassName, $attributeModelClassName)
 {
     assert('is_string($modelClassName)');
     assert('is_string($attributeModelClassName)');
     $attributeTableName = $attributeModelClassName::getTableName($attributeModelClassName);
     $tableAliasName = $attributeTableName;
     $castedDownModelClassName = $modelClassName;
     while (get_parent_class($modelClassName) != $attributeModelClassName && get_parent_class($modelClassName) != 'RedBeanModel') {
         $castedDownFurtherModelClassName = $castedDownModelClassName;
         $castedDownModelClassName = $modelClassName;
         $modelClassName = get_parent_class($modelClassName);
         if ($modelClassName::getCanHaveBean()) {
             $castedUpAttributeTableName = $modelClassName::getTableName($modelClassName);
             if (!$this->joinTablesAdapter->isTableInFromTables($castedUpAttributeTableName)) {
                 if ($castedDownModelClassName::getCanHaveBean()) {
                     $onTableAliasName = $castedDownModelClassName::getTableName($castedDownModelClassName);
                 } elseif ($castedDownFurtherModelClassName::getCanHaveBean()) {
                     $onTableAliasName = $castedDownModelClassName::getTableName($castedDownFurtherModelClassName);
                 } else {
                     throw new NotSupportedException();
                 }
                 $onTableAliasName = $this->joinTablesAdapter->addFromTableAndGetAliasName($castedUpAttributeTableName, self::resolveForeignKey($castedUpAttributeTableName), $onTableAliasName);
             }
         }
     }
     if (!$this->joinTablesAdapter->isTableInFromTables($attributeTableName)) {
         $modelClassName = static::resolveModelClassNameThatCanHaveTable($modelClassName, $castedDownModelClassName);
         $tableAliasName = $this->joinTablesAdapter->addFromTableAndGetAliasName($attributeTableName, self::resolveForeignKey($attributeTableName), $modelClassName::getTableName($modelClassName));
     }
     return $tableAliasName;
 }
Example #2
0
 /**
  * For a give Contact name, run a partial search by
  * full name and retrieve contact models.
  *
  */
 public static function getContactsByPartialFullName($partialName, $pageSize, $stateMetadataAdapterClassName = null)
 {
     assert('is_string($partialName)');
     assert('is_int($pageSize)');
     assert('$stateMetadataAdapterClassName == null || is_string($stateMetadataAdapterClassName)');
     $personTableName = RedBeanModel::getTableName('Person');
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Contact');
     if (!$joinTablesAdapter->isTableInFromTables('person')) {
         $joinTablesAdapter->addFromTableAndGetAliasName($personTableName, "{$personTableName}_id");
     }
     $metadata = array('clauses' => array(), 'structure' => '');
     if ($stateMetadataAdapterClassName != null) {
         $stateMetadataAdapter = new $stateMetadataAdapterClassName($metadata);
         $metadata = $stateMetadataAdapter->getAdaptedDataProviderMetadata();
         $metadata['structure'] = '(' . $metadata['structure'] . ')';
     }
     $where = RedBeanModelDataProvider::makeWhere('Contact', $metadata, $joinTablesAdapter);
     if ($where != null) {
         $where .= 'and';
     }
     $where .= self::getWherePartForPartialNameSearchByPartialName($partialName);
     return Contact::getSubset($joinTablesAdapter, null, $pageSize, $where, "person.firstname, person.lastname");
 }
 /**
  * For both non related and related attributes, this method resolves whether a from join is needed.  This occurs
  * for example if a model attribute is castedUp. And that attribute is a relation that needs to be joined in
  * order to search.  Since that attribute is castedUp, the castedUp model needs to be from joined first.  This
  * also applies if the attribute is not a relation and just a member on the castedUp model. In that scenario,
  * the castedUp model also needs to be joined.
  *
  * This methhod assumes if the attribute is not on the base model, that it is casted up not down from it.
  */
 public static function resolveShouldAddFromTableAndGetAliasName(RedBeanModelAttributeToDataProviderAdapter $modelAttributeToDataProviderAdapter, RedBeanModelJoinTablesQueryAdapter $joinTablesAdapter)
 {
     $attributeTableName = $modelAttributeToDataProviderAdapter->getAttributeTableName();
     $tableAliasName = $attributeTableName;
     if ($modelAttributeToDataProviderAdapter->getModelClassName() == 'User' && $modelAttributeToDataProviderAdapter->getAttributeModelClassName() == 'Person') {
         $modelTableName = $modelAttributeToDataProviderAdapter->getModelTableName();
         if (!$joinTablesAdapter->isTableInFromTables('person')) {
             $personTableName = $attributeTableName;
             $joinTablesAdapter->addFromTableAndGetAliasName($personTableName, "{$personTableName}_id", $modelTableName);
         }
     } elseif ($modelAttributeToDataProviderAdapter->getAttributeModelClassName() != $modelAttributeToDataProviderAdapter->getModelClassName()) {
         $modelClassName = $modelAttributeToDataProviderAdapter->getModelClassName();
         while (get_parent_class($modelClassName) != $modelAttributeToDataProviderAdapter->getAttributeModelClassName()) {
             $castedDownModelClassName = $modelClassName;
             $modelClassName = get_parent_class($modelClassName);
             $castedUpAttributeTableName = $modelClassName::getTableName($modelClassName);
             if (!$joinTablesAdapter->isTableInFromTables($castedUpAttributeTableName)) {
                 $joinTablesAdapter->addFromTableAndGetAliasName($castedUpAttributeTableName, "{$castedUpAttributeTableName}_id", $castedDownModelClassName::getTableName($castedDownModelClassName));
             }
         }
         if (!$joinTablesAdapter->isTableInFromTables($attributeTableName)) {
             $tableAliasName = $joinTablesAdapter->addFromTableAndGetAliasName($attributeTableName, "{$attributeTableName}_id", $modelClassName::getTableName($modelClassName));
         }
     }
     return $tableAliasName;
 }