Repository: Add native support for virtual table names

This commit is contained in:
Johannes Meyer 2015-10-30 15:34:19 +01:00
parent d32c3d2a52
commit df7a2ee0a9
1 changed files with 42 additions and 1 deletions

View File

@ -52,6 +52,16 @@ abstract class Repository implements Selectable
*/
protected $baseTable;
/**
* The virtual tables being provided
*
* This may be initialized by concrete repository implementations with an array
* where a key is the name of a virtual table and its value the real table name.
*
* @var array
*/
protected $virtualTables;
/**
* The query columns being provided
*
@ -255,6 +265,32 @@ abstract class Repository implements Selectable
return $this->baseTable;
}
/**
* Return the virtual tables being provided
*
* Calls $this->initializeVirtualTables() in case $this->virtualTables is null.
*
* @return array
*/
public function getVirtualTables()
{
if ($this->virtualTables === null) {
$this->virtualTables = $this->initializeVirtualTables();
}
return $this->virtualTables;
}
/**
* Overwrite this in your repository implementation in case you need to initialize the virtual tables lazily
*
* @return array
*/
protected function initializeVirtualTables()
{
return array();
}
/**
* Return the query columns being provided
*
@ -792,7 +828,7 @@ abstract class Repository implements Selectable
}
/**
* Validate that the requested table exists
* Validate that the requested table exists and resolve it's real name if necessary
*
* @param string $table The table to validate
* @param RepositoryQuery $query An optional query to pass as context
@ -809,6 +845,11 @@ abstract class Repository implements Selectable
throw new ProgrammingError('Table "%s" not found', $table);
}
$virtualTables = $this->getVirtualTables();
if (isset($virtualTables[$table])) {
$table = $virtualTables[$table];
}
return $table;
}