add relationClassName to AR to allow different relation classes

... for different dbms
This commit is contained in:
Carsten Brandt
2013-10-29 12:41:24 +01:00
parent 4653526262
commit 0146596647

View File

@ -92,6 +92,10 @@ class ActiveRecord extends Model
*/
const OP_ALL = 0x07;
/**
* @var string the name of the class to use for relations.
*/
protected $relationClassName = 'yii\\db\\ActiveRelation';
/**
* @var array attribute values indexed by attribute names
*/
@ -384,7 +388,7 @@ class ActiveRecord extends Model
return $this->_related[$t];
}
$value = parent::__get($name);
if ($value instanceof ActiveRelation) {
if ($value instanceof $this->relationClassName) {
return $this->_related[$t] = $value->multiple ? $value->all() : $value->one();
} else {
return $value;
@ -474,7 +478,7 @@ class ActiveRecord extends Model
*/
public function hasOne($class, $link)
{
return new ActiveRelation([
return new $this->relationClassName([
'modelClass' => $class,
'primaryModel' => $this,
'link' => $link,
@ -512,7 +516,7 @@ class ActiveRecord extends Model
*/
public function hasMany($class, $link)
{
return new ActiveRelation([
return new $this->relationClassName([
'modelClass' => $class,
'primaryModel' => $this,
'link' => $link,
@ -1264,7 +1268,7 @@ class ActiveRecord extends Model
$getter = 'get' . $name;
try {
$relation = $this->$getter();
if ($relation instanceof ActiveRelation) {
if ($relation instanceof $this->relationClassName) {
return $relation;
}
} catch (UnknownMethodException $e) {