ich bastel gerade an eine plugin der in seine eigenen tabelle eine assoziation zu shopware tabelle s_filter_options
haben soll, und dazu ein shopware-backend maske zum editieren. (die doctrine entity zu s_filter_options
ist Shopware\Models\Property\Option
und extjs model ist Shopware.apps.Article.model.PropertyOption
)
also habe ich in meine doctrine entity folgenden feld:
/**
* @ORM\ManyToMany(targetEntity="Shopware\Models\Property\Option")
* @ORM\JoinTable(name="foo_tab_tab_filters")
*/
private $filters;
und mein extjs modelle:
Ext.define('Shopware.apps.FooTab.model.Filter', {
extend: 'Shopware.apps.Article.model.PropertyOption',
configure: function() {
return {
related: 'Shopware.apps.FooTab.view.detail.Filter'
}
}
});
Ext.define('Shopware.apps.FooTab.model.Tab', {
extend: 'Shopware.data.Model',
configure: function() {
return {
controller: 'FooTab',
detail: 'Shopware.apps.FooTab.view.detail.Tab'
};
},
fields: [
{ name: 'id', type: 'int', useNull: true },
{ name: 'name', type: 'string'},
],
associations: [
{
relation: "ManyToMany",
type: "hasMany",
model: "Shopware.apps.FooTab.model.Filter",
name: "getFilter",
associationKey: "filters"
}
]
});
denn kompletten code kann man hier finden: GitHub - hlb-schmidt/FooTab
problem 1 : ein bug?
wenn ich in shopware-backend durch Artikel->FooTab - was durch diesen plugin addiert wird - eine neue eintrag hinzufügen will, kommt fehler:
Shopware.apps.FooTab.model.Filter has to be an instance of Shopware.data.Model
und weil Shopware.apps.FooTab.model.Filter
erweitert Shopware.apps.Article.model.PropertyOption
, müssen wir Shopware.apps.Article.model.PropertyOption
anpassen? oder was ist der richtige weg um diesen fehler?
hab es zum testen mal direkt in shopware code angepasst:
diff --git a/themes/Backend/ExtJs/backend/article/model/property_option.js b/themes/Backend/ExtJs/backend/article/model/property_option.js
index edc2b10..6010bf6 100644
--- a/themes/Backend/ExtJs/backend/article/model/property_option.js
+++ b/themes/Backend/ExtJs/backend/article/model/property_option.js
@@ -39,7 +39,7 @@ Ext.define('Shopware.apps.Article.model.PropertyOption', {
* Extends the standard Ext Model
* @string
*/
- extend: 'Ext.data.Model',
+ extend: 'Shopware.data.Model',
/**
* Fields array which contains the model fields
und die fehlermeldung ist weg…
(ist problem 2 wegen dies?)
problem 2 : der eigentliche problem
wenn ich jetzt in shopware-backend mit Artikel->FooTab eine neue eintrag hinzufüge, und filter(s) auswähle, bekomme ich beim speichern die meldung “eintrag wurde erfolgreich gespeichert”, aber tabelle foo_tab_tab_filters
bleibt trotzdem leer
was mache ich falsch (bzw. fehlt) das die filter assoziatonen nicht automagisch ins foo_tab_tab_filters
gespeichert werden?
was will denn extjs überhaupt in meine doctrine modell haben, um diese assoziation zu speichern? setFilters()? addFilter()?
muss ich was in meine extjs model fürs speichern addieren?
ich dachte ich hätte alles genau so gemacht wie in Backend Components - Associations
und was ist überhaupt die name
in associations
in extjs model? in Backend Components - Associations ist zbs. für category getCategory
drin, aber getCategory
ist nirgens anderswo definiert…
ps. diese wurde mit shopware 5.3.27 getestet.