Не работает extraFields

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
konstantin22
Сообщения: 10
Зарегистрирован: 2017.07.30, 11:35

Не работает extraFields

Сообщение konstantin22 »

Всем привет. Вот вроде читаешь документацию и вроде всё понятно, а в итоге ничего не получается. Почему не работает ?expand=offers, когда в extraFields поле определенно.

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

<?php

namespace app\modules\catalog\models\entity;

use app\modules\media\components\behaviors\ImageUploadMinify;
use yii\behaviors\SluggableBehavior;
use yii\behaviors\TimestampBehavior;

/**
 * This is the model class for table "product".
 *
 * @property int $id
 * @property int $is_active
 * @property string|null $name
 * @property string $slug
 * @property string|null $image
 * @property int|null $category_id
 * @property int|null $created_at
 * @property int|null $updated_at
 *
 * @property Offers $offers
 */
class Product extends \yii\db\ActiveRecord
{
    public function behaviors()
    {
        return [
            TimestampBehavior::className(),
            [
                'class' => SluggableBehavior::className(),
                'attribute' => 'name',
                'ensureUnique' => true,
            ],
            [
                'class' => ImageUploadMinify::class,
                'attribute' => 'image',
                'path' => '@webroot/upload/',
                'url' => '@web/upload/'
            ],
        ];
    }

    public function rules()
    {
        return [
            [['is_active', 'category_id', 'created_at', 'updated_at'], 'integer'],
            [['slug'], 'required'],
            [['name'], 'string', 'max' => 128],
            [['slug', 'image'], 'string', 'max' => 255],
        ];
    }

    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'is_active' => 'Is Active',
            'name' => 'Name',
            'slug' => 'Slug',
            'image' => 'Image',
            'category_id' => 'Category ID',
            'created_at' => 'Created At',
            'updated_at' => 'Updated At',
        ];
    }

    public function getOffers()
    {
        return $this->hasMany(Offers::className(), ['product_id' => 'id']);
    }

    public function extraFields()
    {
        return [
            'offers'
        ];
    }
}

Контроллер на который делается запрос

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

<?php

namespace app\modules\catalog\controllers;


use app\modules\catalog\models\entity\Product;
use app\modules\catalog\models\entity\SaveProductProperties;
use app\modules\catalog\models\helpers\OfferHelper;
use yii\helpers\Json;
use app\modules\catalog\models\entity\Offers;
use yii\rest\Controller;

class RestController extends Controller
{
    public $modelClass = 'app\modules\catalog\models\entity\Product';

    public function behaviors()
    {
        return [
            'corsFilter' => [
                'class' => \yii\filters\Cors::className(),
            ],
        ];
    }

    protected function verbs()
    {
        return [
            'get' => ['GET'],
        ];
    }

    public function actionGet()
    {
        $query = $this->modelClass::find();
        return Json::encode($query->all());
    }
}
Данные приходят такие

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

[{"id":1,"is_active":1,"name":"йцввцй","slug":"jcvvcj","image":null,"category_id":2,"created_at":1607061945,"updated_at":1607061945},{"id":2,"is_active":1,"name":"asdasdads","slug":"asdasdads","image":null,"category_id":2,"created_at":1607064414,"updated_at":1607064414}]
Ответить