Quantcast
Channel: Programming - Shopware Community Forum
Viewing all articles
Browse latest Browse all 118

ManyToOne Association's Problem Backendplugin

$
0
0
Ich habe ein Problem mit einem Backend-Plugin.
Grob gesagt Besitz es zwei MODELS und dann für jedes Model einen eigenen Backendcontroller.

Nun will ich, dass eine mit dem anderen Model verknüpfen. Aber leider erscheint immer nur die ID und es wird nicht automatisch ein SelectionSearchfield erzeugt so wie in dem Beispiel mit dem Steuersatz (taxId -> tax) und dem Produkt Siehe hier

Model 1: Flippingbook
/**
     * @var integer $flippingbookcategoryId
     *
     * @ORM\Column(name="flippingbookcategory_id", type="integer")
     */
    private $flippingbookcategoryId = null;

    /**
     * @var
     * @ORM\ManyToOne(
     *      targetEntity="Shopware\CustomModels\BonoFlippingbook\Flippingbookcategory",
     *      inversedBy="flippingbooks"
     * )
     * @ORM\JoinColumn(name="flippingbookcategory_id", referencedColumnName="id")
     */
    protected $flippingbookcategory;

    /**
     * @return \Shopware\CustomModels\BonoFlippingbook\Flippingbookcategory
     */
    public function getFlippingbookcategory()
    {
        return $this->flippingbookcategory;
    }

    /**
     * @param \Shopware\CustomModels\BonoFlippingbook\Flippingbookcategory $flippingbookcategory
     */
    public function setFlippingbookcategory($flippingbookcategory)
    {
        $this->flippingbookcategory=$flippingbookcategory;
    }
Der einsprechende Teil im Model 2: Flippingbookcategory
/**
     * @var \Shopware\CustomModels\BonoFlippingbook\Flippingbook[]
     *
     * @ORM\OneToMany(
     *      targetEntity="Shopware\CustomModels\BonoFlippingbook\Flippingbook",
     *      mappedBy="flippingbookcategory"
     * )
     */
    protected $flippingbooks;

    public function __construct()
    {
        $this->flippingbooks = new ArrayCollection();
    }

    /**
     * @return \Shopware\CustomModels\BonoFlippingbook\Flippingbook[]
     */
    public function getFlippingbooks()
    {
        return $this->flippingbooks;
    }

    /**
     * @param \Shopware\CustomModels\BonoFlippingbook\Flippingbook[] $flippingbooks
     * @return \Shopware\Components\Model\ModelEntity
     */
    public function setFlippingbooks($flippingbooks)
    {
        return $this->setOneToMany(
            $flippingbooks,
            'Shopware\CustomModels\BonoFlippingbook\Flippingbook',
            'flippingbooks',
            'flippingbookcategory'
        );
    }
ExtJS Model 1:
Ext.define('Shopware.apps.BonoFlippingbook.model.Flippingbook', {
    extend: 'Shopware.data.Model',

    configure: function() {
        return {
            controller: 'BonoFlippingbook',
            detail: 'Shopware.apps.BonoFlippingbook.view.detail.Flippingbook'
        }
    },


    fields: [
        //{block name="backend/bono_flippingbook/model/flippingbook/fields"}{/block}
        { name:'id', type:'int', useNull: true },
        { name:'name', type:'string' },
        ...
        { name:'flippingbookcategoryId', type:'integer'}
    ],
    associations: [{
        relation:'ManyToOne',
        field:'flippingbookcategoryId',
        type:'hasMany',
        model:'Shopware.apps.BonoFlippingbook.model.Flippingbookcategory',
        name:'getFlippingbookcategory',
        associationKey:'flippingbookcategory'
    }]
});
Ext.define('Shopware.apps.BonoFlippingbookcategory.model.Flippingbookcategory', {
    extend: 'Shopware.data.Model',

    configure: function() {
        return {
            controller: 'BonoFlippingbookcategory',
            detail: 'Shopware.apps.BonoFlippingbookcategory.view.detail.Flippingbookcategory'
        }
    },


    fields: [
        //{block name="backend/bono_flippingbookcategory/model/flippingbookcategory/fields"}{/block}
        { name:'id', type:'int', useNull: true },
        { name:'active', type:'boolean', defaultValue: true },
        { name:'name', type:'string' },
        { name:'title', type:'string' },
        { name:'metaTitle', type:'string', useNull: true },
        { name:'description', type:'string', useNull: true },
        { name:'descriptionLong', type:'string', useNull: true },
        { name:'keywords', type:'string', useNull: true },
        { name:'sorting', type:'int' }
    ],
    associations: [
        {
            relation: 'OneToMany',
            storeClass: 'Shopware.apps.BonoFlippingbook.model.Flippingbook',
            loadOnDemand: true,

            type: 'hasMany',
            model: 'Shopware.apps.BonoFlippingbook.model.Flippingbook',
            name: 'getFlippingbooks',
            associationKey: 'flippingbooks'
        }
    ]

});
im Controller hab ich noch folgende Funktion:
protected function getListQuery()
    {
        $builder = parent::getListQuery();

        $builder->leftJoin('flippingbook.flippingbookcategory', 'flippingbookcategory')
                ->addSelect(array('flippingbookcategory'));

        return $builder;
    }
Wenn ich den Controller für das Listig nun direkt anspreche schaut auch soweit alles gut aus:
{
  "success":true,
  "data":[
    {
      "id":1,
      "name":"14P04",
      "flippingbookcategoryId":4,
      "flippingbookcategory":{
        "id":4,
        "name":"Prospekt",
         "sorting":300
       }
     }
  ],
  "total":1
}
Kann mir da irgendwer helfen wo der Fehler liegt?
Wieso bekomme ich nicht so ein Selection Auswahl angezeigt wie bei dem tax-Beispiel?

Viewing all articles
Browse latest Browse all 118

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>