Примерно так
Код: Выделить всё
class My extends ActiveRecord {
public function tableName() {
return 'mytable';
}
public function useFields() {
return ['id', 'test1', 'test2', 'test3', 'test4'];
}
public function fieldsAliase() {
return [ 'name' => 'test1', 'title' => 'test2', 'order' => 'test3', 'counter' => 'test4'];
}
public function __get($name)
{
$aliases = $this->fieldsAliase();
$fields = $ths->useFields();
if (is_array($fields) && in_array($name, $filelds)) {
if (is_array($aliases) && array_key_exists($name, $aliases)) {
return parent::__get($aliases[$name]);
}
return parent::__get($name);
} elseif (array_key_exists($name, $this->_related)) {
return parent::__get($name);
}
$value = parent::__get($name);
if ($value instanceof ActiveRecordInterface || is_array($value) || is_null($value)) {
return $value;
}
throw new InvalidArgumentException(get_class($this) . ' has no attribute named "' . $name . '".');
}
public function __set($name, $value)
{
$aliases = $this->fieldsAliase();
$fields = $ths->useFields();
if (is_array($fields) && in_array($name, $filelds)) {
if (is_array($aliases) && array_key_exists($name, $aliases)) {
parent::__set($aliases[$name], $value);
return;
} else {
parent::__set($name, $value);
return;
}
} elseif (array_key_exists($name, $this->_related)) {
parent::__set($name, $value);
return;
}
$value = parent::__get($name);
if ($value instanceof ActiveRecordInterface || is_array($value)) {
parent::__set($name, $value);
return;
}
throw new InvalidArgumentException(get_class($this) . ' has no attribute named "' . $name . '".');
}
}
Но тут есть рад нюансов, будет недоступна магия обычных сеттеров и геттеров, будут некоторые нюансы со связями (все можно устранить, но решение этой задачи за рамками поста).
Если убрать ограничение на использование определенных полей, то этих недостатков не будет.
Код: Выделить всё
class My extends ActiveRecord {
public function tableName() {
return 'mytable';
}
public function fieldsAliase() {
return [ 'name' => 'test1', 'title' => 'test2', 'order' => 'test3', 'counter' => 'test4'];
}
public function __get($name)
{
$aliases = $this->fieldsAliase();
if (is_array($aliases) && array_key_exists($name, $aliases)) {
return parent::__get($aliases[$name]);
}
return parent::__get($name);
}
public function __set($name, $value)
{
$aliases = $this->fieldsAliase();
if (is_array($aliases) && array_key_exists($name, $aliases)) {
parent::__set($aliases[$name], $value);
} else {
parent::__set($name, $value);
}
}
}