Наследование REST ACTION

Всё что касается построения API
Ответить
a.k.
Сообщения: 56
Зарегистрирован: 2014.11.29, 10:39

Наследование REST ACTION

Сообщение a.k. »

Суть: есть модель news. Каждый раз когда идет обращение к модели нужно инкрементировать поле hits.
В связи с этим возникла такая идея: переопределяю actionView($id), делаю вызов parent::actionView($id), меняю поле hits и сохраняю модель. Но система ругается что нет такого actionView у родителя. Как быть??
a.k.
Сообщения: 56
Зарегистрирован: 2014.11.29, 10:39

Re: Наследование REST ACTION

Сообщение a.k. »

Просто заменил метод view:

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

public function actionView($id)
    {   
        $model = News::findOne($id);
        ++$model->hits;
        $model->save();
        return $model;
    }
    
public function actions()
    {
        $actions = parent::actions();
    
        // убираем старый метод
        unset($actions['view']);
        return $actions;
    }
 
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Наследование REST ACTION

Сообщение anton44eg »

a.k. писал(а):Просто заменил метод view:

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

public function actionView($id)
    {   
        $model = News::findOne($id);
        ++$model->hits;
        $model->save();
        return $model;
    }
    
public function actions()
    {
        $actions = parent::actions();
    
        // убираем старый метод
        unset($actions['view']);
        return $actions;
    }
тут у вас race condition
используйте updateCounters
Аватара пользователя
chungachguk
Сообщения: 435
Зарегистрирован: 2012.07.17, 11:52

Re: Наследование REST ACTION

Сообщение chungachguk »

anton44eg писал(а): тут у вас race condition
Это что за зверь?
Аватара пользователя
diselop
Сообщения: 240
Зарегистрирован: 2013.01.29, 14:56

Re: Наследование REST ACTION

Сообщение diselop »

chungachguk писал(а):
anton44eg писал(а): тут у вас race condition
Это что за зверь?
https://ru.wikipedia.org/wiki/%D1%EE%F1 ... E%ED%EA%E8
a.k.
Сообщения: 56
Зарегистрирован: 2014.11.29, 10:39

Re: Наследование REST ACTION

Сообщение a.k. »

anton44eg, спасибо за информацию. Метод заменил в соответствии с updateCounters.
a.k.
Сообщения: 56
Зарегистрирован: 2014.11.29, 10:39

Re: Наследование REST ACTION

Сообщение a.k. »

Опять вопрос возник...Как мне отдать related count в этом экшне?

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

// view action
public function actionView($id)
    {   
        $model = News::findOne($id);
        $model->updateCounters(['hits' => 1]);
        $model->commentsCount = $model->getCommentsCount();
        return $model;
    }
    
// model relation

public function getCommentsCount()
    {
        // news has_many comments via comments.news_id -> id
        return $this->hasMany(Comments::className(), ['news_id' => 'id'])->count();
    }    
 
При запросе поля "comments" нет. Пытался определить в модели свойство commentscount - все равно не работает
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Наследование REST ACTION

Сообщение lynicidn »

fields, extrafields
a.k.
Сообщения: 56
Зарегистрирован: 2014.11.29, 10:39

Re: Наследование REST ACTION

Сообщение a.k. »

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

public function fields()
    {
        $fields=parent::fields();
        unset($fields['date_created'],$fields['date_updated'],$fields['show']);
        array_push($fields,'commentsCount');
        return $fields;
    }
 
Большое спасибо, как раз ковырять начал fields, оказалось в нужном направлении работал
Ответить