Shopware 5.4 Отображение ассоциаций моделей ExtJs - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть поле в бэкэнд-модели extjs с полем, которое вызывает 'store' и совпадает с ассоциацией ManyToOne в сущности.Я передаю соответствующие данные из контроллера, но поле не заполняется данными или не заменяется раскрывающимся списком для параметров ассоциации.

Вот как это выглядит в настоящее время: Grid Display Detail Display

Вот модель:

Ext.define('Shopware.apps.MyModule.model.PrimaryDateExemption', {
    extend: 'Shopware.data.Model',

    configure: function() {
        return {
            controller: 'MyModule',
            detail: 'Shopware.apps.MyModule.view.detail.PrimaryDateExemption'
        };
    },

    associations: [
        {
            relation: 'ManyToOne',
            field: 'storeId',
            type: 'hasMany',
            name: 'getName',
            associationKey: 'store',
            model: 'Shopware.apps.StoreLocator.model.Main'
        }
    ],

    fields: [
        { name : 'id', type: 'int', useNull: true },
        { name : 'primaryDate', type: 'date', dateFormat: 'd.m.Y' },
        { name : 'storeId', type: 'int', useNull: true }
    ]
});

Идентификаторы и даты отображаются в виде сетки и подробного представления, но все яget - целочисленное поле для магазина.Из того, что я могу сказать из документации https://developers.shopware.com/developers-guide/backend-components/associations/ мне не нужно ничего добавлять.Чтобы процитировать этот документ:

Поскольку ассоциации могут отображаться одинаково, Shopware.data.Model уже имеет некоторые предварительно настроенные представления.Например, связи ManyToOne (например, product & tax) всегда отображают комбинированный список. Чтобы объединить эту информацию в одно поле, вы предоставляете поле опции: 'taxId', которое указывает приложению заменить поле ввода по умолчанию соответствующим настроенным компонентом.ранее.

Вот сущность:

<?php

namespace MyModule\Models;

use Doctrine\ORM\Mapping as ORM;
use Shopware\Components\Model\ModelEntity;

/**
 * @ORM\Entity
 * @ORM\Table(name="s_primary_date_exemption")
 */
class PrimaryDateExemption extends ModelEntity
{
    /**
     * @var int $id
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(type="date")
     */
    private $primaryDate;

    /**
     * @ORM\ManyToOne(targetEntity="NetiStoreLocator\Models\Store")
     * @ORM\JoinColumn(name="store_id", referencedColumnName="id")
     */
    private $store = null;

    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    public function getPrimaryDate()
    {
        return $this->primaryDate;
    }

    public function setPrimaryDate($primaryDate)
    {
        $this->primaryDate = $primaryDate;
    }

    /**
     * @return null|mixed
     */
    public function getStore()
    {
        return $this->store;
    }

    /**
     * Get ID of pick up store or null if none set
     *
     * @return null|int
     */
    public function getStoreId()
    {
        return ($this->store !== null) ? $this->store->getId() : null;
    }

    /**
     * @param mixed $store
     */
    public function setStore($store)
    {
        $this->store = $store;
    }
}

Это контроллер, который возвращает данные:

<?php

use MyModule\Models\PrimaryDateExemption;

class Shopware_Controllers_Backend_MyModule extends Shopware_Controllers_Backend_Application
{
    protected $model = PrimaryDateExemption::class;
    protected $alias = 'primary_date';

    protected function getListQuery()
    {
        $builder = parent::getListQuery();

        $builder->leftJoin('primary_date.store', 'store');
        $builder->addSelect(array('store'));

        return $builder;
    }

    protected function getDetailQuery($id)
    {
        $builder = parent::getDetailQuery($id);

        $builder->leftJoin('primary_date.store', 'store');
        $builder->addSelect(array('store'));

        return $builder;
    }
}

Как я уже сказал, я вижучто данные для сетки возвращаются с разумными данными (отформатированными для удобства просмотра):

    {
    "success": true,
    "data" :
    [{
        "id": 14,
        "primaryDate": new Date(1566860400000),
        "store": {
            "id": 1,
            "subshopIDs": "0",
            "name": "George Street, London"
        }
    }, {
        "id": 1,
        "primaryDate": new Date(1545696000000),
        "store": null
    }, {
        "id": 3,
        "primaryDate": new Date(1535410800000),
        "store": null
    }, {
        "id": 4,
        "primaryDate": new Date(1545264000000),
        "store": null
    }, {
        "id": 5,
        "primaryDate": new Date(1545350400000),
        "store": null
    }, {
        "id": 6,
        "primaryDate": new Date(1545782400000),
        "store": null
    }, {
        "id": 7,
        "primaryDate": new Date(1545868800000),
        "store": null
    }, {
        "id": 8,
        "primaryDate": new Date(1546300800000),
        "store": null
    }, {
        "id": 9,
        "primaryDate": new Date(1546387200000),
        "store": null
    }, {
        "id": 10,
        "primaryDate": new Date(1555628400000),
        "store": null
    }, {
        "id": 11,
        "primaryDate": new Date(1555974000000),
        "store": null
    }, {
        "id": 12,
        "primaryDate": new Date(1557183600000),
        "store": null
    }, {
        "id": 13,
        "primaryDate": new Date(1558998000000),
        "store": null
    }], 
"total":13
}

Если здесь нет явной ошибки, может кто-нибудь указать мне на некоторую документацию для этой магии ассоциации с extJs?Документация по магазинам в этой области довольно легкая.

...