public function on($rel, $aliasFrom = null, $aliasTo = null, $constraints = array())
{
$model = $rel->from();
$aliasFrom = $aliasFrom ?: $model::meta('name');
$aliasTo = $aliasTo ?: $rel->name();
$keyConstraints = array();
foreach ($rel->key() as $from => $to) {
$keyConstraints["{$aliasFrom}.{$from}"] = "{$aliasTo}.{$to}";
}
$mapAlias = array($model::meta('name') => $aliasFrom, $rel->name() => $aliasTo);
$relConstraints = $this->_on((array) $rel->constraints(), $aliasFrom, $aliasTo, $mapAlias);
$constraints = $this->_on($constraints, $aliasFrom, $aliasTo, array());
return $constraints + $relConstraints + $keyConstraints;
}