Страница 1 из 1
Как добавить в AR модель свое свойство?
Добавлено: 2014.10.09, 10:14
mclighter
Добрый день!
Есть модель File, на основе таблицы с полями - id, url, name.
В модели добавлено свойство:
Код: Выделить всё
public function getFileUrl()
{
return $this->url.$this->name.".jpg";
}
что надо сделать чтобы File::findOne(130) возвращало объект с полем fileUrl ?
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.09, 10:28
astronin
во первых, вы добавили метод, а не свойство
попробуйте вписать в attributes() 'fileUrl'
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.09, 10:43
mclighter
Сделал так
Код: Выделить всё
public function attributes()
{
return array_merge(
parent::attributes(),['fileUrl']
);
}
не помогло.
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.09, 11:02
maleks
Что значит с полем?
Так же оно же выдает результат и окей?:
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.09, 11:05
maleks
Хотя через attributes() может выйти если еще вдобавок и сеттер объявить для данного св-ва.
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.09, 11:51
mclighter
вы правы не с полем, объект с атрибутом fileUrl.
Сеттер также объявлен, но он тут не нужен.
File::findOne(130)->fileUrl ничего не возвращает
File::findOne(130)->getFileUrl() возвращает значение атрибута. Но мне это не подходит. Мне нужен весь объект.
А вот через REST API атрибут как поле доступен, достаточно включить его в fields() и описать геттер.
Привожу весь класс, может что-то упустил:
Код: Выделить всё
class File extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'File';
}
public function rules()
{
return [
[['url', 'name'], 'safe'],
[['url', 'name', 'fileUrl'], 'string']
];
}
public function fields()
{
return [
'id',
'url',
'name',
'fileUrl',
];
}
public function attributes()
{
return array_merge(
parent::attributes(),['fileUrl']
);
}
public function setFileUrl($value)
{
$this->fileUrl = $value;
}
public function getFileUrl()
{
return $this->url.$this->name.".jpg";
}
}
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.09, 13:41
maleks
>> File::findOne(130)->fileUrl ничего не возвращает
а если attributes() не переопределять, то возвращает?
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.09, 14:13
mclighter
да, так возвращает.
но мне надо в объекте
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.11, 14:08
Noobie
А если вот так
Код: Выделить всё
public $fileUrl;
public function afterFind()
{
$this->fileUrl = $this->url.$this->name.".jpg";
}
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.14, 09:28
mclighter
Большое спасибо!
так все отлично работает. именно так как хотел.
Re: Как добавить в AR модель свое свойство?
Добавлено: 2014.10.14, 17:09
lynicidn
Код: Выделить всё
/**
@property string $fileUrl read-only
**/
...
public function getFileUrl()
{
return $this->url.$this->name.".jpg";
}
читабельнее
p.s. findOne и так вернет тебе модель, в которой будет этот геттер, phpDoc может тебя смутил что геттер не сработает