добавить новое поле в ресурсы

Всё что касается построения API
Ответить
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

добавить новое поле в ресурсы

Сообщение styleroom »

всем привет
мне нужно добавить в ответ новое поле, которого нет в таблице
в модели, атрибут добавлен
в методе модели отвечающей за возврат данных запрос сформирован, с возвратом нового поля
если пользуюсь моделью вне АПИ - все хорошо = поле доступно как атрибут
если использую модель в апи - это поле равно null
что делаю не так?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: добавить новое поле в ресурсы

Сообщение ElisDN »

А в fields() его прописали?
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: добавить новое поле в ресурсы

Сообщение styleroom »

ElisDN писал(а):А в fields() его прописали?
теперь прописал :-)
вот так

Код: Выделить всё

// add new field
$fields['url'] = function () {
        return $this->url;
}; 
но все равно не работает :-(

листинг модели-ресурса

Код: Выделить всё

/**
/**
 * new field
 */
public $url;

/**
 * add new attribute
 */
public function attributes()
{
    return array_merge(
        parent::attributes(),
        ['url']
    );
}  

/**
 * only url, name and id
 */    
public function infoShort () 
{  
    $sql = "SELECT "
            . "`id_art`, "
            . "`name`, "
            . "CONCAT('/articles/one/',`id_art`,'.html') AS 'url' "
            . "FROM `articles` "
            . "WHERE `show` = 'yes'";
    $data = parent::findBySql($sql)->all();
    return $data;
}

/**
 * cusomize fields
 */
public function fields()
{

    $fields = parent::fields();       

    // add new field
    $fields['url'] = function () {
            return $this->url;
    };        

    // remove some fields
    unset($fields['dt'], $fields['show']);       

    return $fields;
} 
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: добавить новое поле в ресурсы

Сообщение styleroom »

странное дело - все заработало, когда удалил новое поле из оверрайда атрибутов
где добавляю новое поле url
так и должно быть?

вот так все работает

Код: Выделить всё

public function attributes()
{
    return array_merge(
        parent::attributes()
    );
} 
а так - не работает

Код: Выделить всё

/**
 * add new attribute
 */
public function attributes()
{
    return array_merge(
        parent::attributes(),
        ['url']
    );
}
Ответить