lithium\data\source\Database::relationship()
Implements
lithium\data\Source::relationship()
Defines or modifies the default settings of a relationship between two models.
Parameters
-
string
$class
the primary model of the relationship
-
string
$type
the type of the relationship (hasMany, hasOne, belongsTo)
-
string
$name
the name of the relationship
-
array
$config
relationship options
Returns
arrayReturns an array containing the configuration for a model relationship.
Source
public function relationship($class, $type, $name, array $config = []) {
$primary = $class::meta('key');
if (is_array($primary)) {
$key = array_combine($primary, $primary);
} elseif ($type === 'hasMany' || $type === 'hasOne') {
$secondary = Inflector::underscore(Inflector::singularize($class::meta('name')));
$key = [$primary => "{$secondary}_id"];
} else {
$key = Inflector::underscore(Inflector::singularize($name)) . '_id';
}
$from = $class;
$fieldName = $this->relationFieldName($type, $name);
$config += compact('type', 'name', 'key', 'from', 'fieldName');
return Libraries::instance(null, 'relationship', $config, $this->_classes);
}