private function compileColumns(Entity $md)
{
$out = [];
$columns = $md->getColumns();
foreach ($columns as $column) {
$data = [Schema::COLUMN_TYPE => $column->getType()->value()];
if ($column->isId()) {
$data[Schema::COLUMN_ID] = true;
}
$default_getter = 'get' . Inflector::classify($column->getProperty());
if ($column->getGetter() && $column->getGetter() != $default_getter) {
$data[Schema::GETTER] = $column->getGetter();
}
$default_setter = 'set' . Inflector::classify($column->getProperty());
if ($column->getSetter() && $column->getSetter() != $default_setter) {
$data[Schema::SETTER] = $column->getSetter();
}
if ($column->getClassName()) {
$data[Schema::COLUMN_CLASS] = $column->getClassName();
}
$out[$column->getName()] = $data;
}
$relationships = $md->getRelationships();
foreach ($relationships as $relationship) {
$data = [Schema::REL_ASSOCIATION => $relationship->getRelationshipType()->value(), Schema::REL_TARGET => $relationship->getTarget()];
$default_getter = 'get' . Inflector::classify($relationship->getName());
if ($relationship->getGetter() && $relationship->getGetter() != $default_getter) {
$data[Schema::GETTER] = $relationship->getGetter();
}
$default_setter = 'set' . Inflector::classify($relationship->getName());
if ($relationship->getSetter() && $relationship->getSetter() != $default_setter) {
$data[Schema::SETTER] = $relationship->getSetter();
}
if ($relationship->getInversedBy()) {
$data[Schema::REL_INVERSED_BY] = $relationship->getInversedBy();
}
if ($relationship->getSortableBy()) {
$data[Schema::SORT_INDICES] = $this->compileSortables($relationship->getSortableBy());
}
$out[$relationship->getName()] = $data;
}
return $out;
}