/** * Gets a model's columns given the a model's config * * @param ModelConfig $config * * @return array( * 'columns' => array(detailed..), * 'includedColumns' => array(field => full_column_name, ...)), * 'computedColumns' => array(key, key, key) */ public static function getColumns($config) { $model = $config->model; $return = array('columns' => array(), 'columnArrays' => array(), 'columnObjects' => array(), 'includedColumns' => array(), 'computedColumns' => array(), 'relatedColumns' => array()); //check if there are columns to iterate over if (count($config->columns) > 0) { $columns = array(); foreach ($config->columns as $field => $column) { //get the column object if (!($columnObject = Column::get($field, $column, $config))) { continue; } //save the column object with a $field-based key, as a simple array (to use in knockout), and as a simple array of arrays $return['columnObjects'][$field] = $columnObject; $return['columns'][] = $columnObject; $return['columnArrays'][] = $columnObject->toArray(); //categorize the columns if ($columnObject->isRelated) { $return['relatedColumns'][$columnObject->field] = $columnObject->field; //if there are nested values, we'll want to grab the values slightly differently if (sizeof($columnObject->nested)) { $fk = $columnObject->nested['models'][0]->{$columnObject->nested['pieces'][0]}()->foreign; $return['includedColumns'][$fk] = $model->table() . '.' . $fk; } else { if ($fk = $columnObject->relationshipField->foreignKey) { $return['includedColumns'][$fk] = $model->table() . '.' . $fk; } } } else { if ($columnObject->isComputed) { $return['computedColumns'][$columnObject->field] = $columnObject->field; } else { $return['includedColumns'][$columnObject->field] = $model->table() . '.' . $columnObject->field; } } } } else { throw new Exception("Administrator: you must provide a valid 'columns' array in each model's config"); } //make sure the table key is included if (!array_get($return['includedColumns'], $model::$key)) { $return['includedColumns'][$model::$key] = $model->table() . '.' . $model::$key; } //make sure any belongs_to fields that aren't on the columns list are included $editFields = Field::getEditFields($config); foreach ($editFields['objectFields'] as $field => $info) { if (is_a($info, 'Admin\\Libraries\\Fields\\Relationships\\BelongsTo')) { $return['includedColumns'][$info->foreignKey] = $model->table() . '.' . $info->foreignKey; } } return $return; }
/** * Gets a model's columns given the a model's config * * @param ModelConfig $config * * @return array( * 'columns' => array(detailed..), * 'includedColumns' => array(field => full_column_name, ...)), * 'computedColumns' => array(key, key, key) */ public static function getColumns($config) { $model = $config->model; $return = array('columns' => array(), 'columnArrays' => array(), 'columnObjects' => array(), 'includedColumns' => array(), 'computedColumns' => array(), 'relatedColumns' => array()); //check if there are columns to iterate over if (count($config->columns) > 0) { $columns = array(); foreach ($config->columns as $field => $column) { //get the column object if (!($columnObject = Column::get($field, $column, $config))) { continue; } //save the column object with a $field-based key, as a simple array (to use in knockout), and as a simple array of arrays $return['columnObjects'][$field] = $columnObject; $return['columns'][] = $columnObject; $return['columnArrays'][] = $columnObject->toArray(); //categorize the columns if ($columnObject->isRelated) { $return['relatedColumns'][$columnObject->field] = $columnObject->field; if ($fk = $columnObject->relationshipField->foreignKey) { $return['includedColumns'][$fk] = $model->table() . '.' . $fk; } } else { if ($columnObject->isComputed) { $return['computedColumns'][$columnObject->field] = $columnObject->field; } else { $return['includedColumns'][$columnObject->field] = $model->table() . '.' . $columnObject->field; } } } } else { throw new Exception("Administrator: you must provide a valid 'columns' array in each model's config"); } //make sure the table key is included if (!array_get($return['includedColumns'], $model::$key)) { $return['includedColumns'][$model::$key] = $model->table() . '.' . $model::$key; } return $return; }
/** * Gets the model's columns * * @param object $model * @param bool $toArray * * @return array( * 'columns' => array(detailed..), * 'includedColumns' => array(field => full_column_name, ...)), * 'computedColumns' => array(key, key, key) */ public static function getColumns($model, $toArray = true) { $return = array('columns' => array(), 'includedColumns' => array(), 'computedColumns' => array(), 'relatedColumns' => array()); if (isset($model->columns) && count($model->columns) > 0) { $columns = array(); foreach ($model->columns as $field => $column) { //get the column object if (!($columnObject = Column::get($field, $column, $model))) { continue; } //if $toArray is true, add the column as an array. otherwise add the column object if ($toArray) { $return['columns'][$columnObject->field] = $columnObject->toArray(); } else { $return['columns'][$columnObject->field] = $columnObject; } //categorize the columns if ($columnObject->isRelated) { $return['relatedColumns'][$columnObject->field] = $columnObject->field; if ($fk = $columnObject->relationshipField->foreignKey) { $return['includedColumns'][$fk] = $model->table() . '.' . $fk; } } else { if ($columnObject->isComputed) { $return['computedColumns'][$columnObject->field] = $columnObject->field; } else { $return['includedColumns'][$columnObject->field] = $model->table() . '.' . $columnObject->field; } } } } else { //throw exception! } //make sure the table key is included if (!array_get($return['includedColumns'], $model::$key)) { $return['includedColumns'][$model::$key] = $model->table() . '.' . $model::$key; } return $return; }