Artikel via ModelManager anlegen - Daten fehlen?

Hallo,

welche Daten brauch ich mindestens, um erfolgreich einen Artikel anlegen zu können bei Verwendung des ModelManager?

 

Ich erhalte die Fehlermeldung “_ Integrity constraint violation: 1048 Column ‘laststock’ _” aber ich habe $article->setLastStock(true); gesetzt…

push - dringend Hilfe benötigt!

das hier hab ich schon versucht: http://community.shopware.com/Foreign-Keys-reparieren_detail_954.html

außerdem habe ich sogar das Feld in der Tabelle selbst auf „nullable“ gestellt… trotzdem kommt der Fehler… gibts das Feld noch wo anders außer in s_articles?

Wenn du in die REST API Doku reinschaust, siehst du in etwa die Liste der “mindest” Felder eines Produktes. So klappte das bei mir auch.

Hier mal ein Auszug wie man es via Resourcen Manager machen würde, dort siehste auch die Felder:
 

$articleId=false;
$articleResource = \Shopware\Components\Api\Manager::getResource('article');

$articleData = array(
    'name' => 'Produktbezeichnung',
    'taxId' => 1,
    'mainDetail' => array(
        'number' => 'Art4711',
        'supplierNumber' => 'Sup0815',
        'active' => true,
        'inStock' => 50,
        'prices' => array(
            array(
                'customerGroupKey' => 'EK',
                'from' => '1',
                'to' => '',
                'price' => 29.90,
                'pseudoPrice' => 0,
                'basePrice' => 0,
                'percent' => 0
            )
        ),
    ),
    'categories' => array(
        array(
            'id' => 3
        )
    ),
    'supplier' => 'Name of Supplier',
    'priceGroupId' => 1,
    'description' => 'Description of article',
    'descriptionLong' => 'Long description of article',
    'active' => true
);

try {
    $article = $articleResource->updateByNumber($articleId, $articleData);
} catch (\Shopware\Components\Api\Exception\NotFoundException $e) {
    $article = $articleResource->create($articleData);
}

Grüße

Ich habe gerade nochmal geschaut. Es gibt in der Tabelle s_articles_details auch noch ein Feld „laststock“ welches not nullable ist.

Wenn ich dieses auf „nullable“ stelle, funktioniert mein Insert … aber ich habe die Details befüllt… sollte doch alles sein, oder @optimondo‍

 

$product->setName(substr($ad->getDescription(), 0, 100));
$product->setDescription($ad->getDescription());
$product->setDescriptionLong($ad->getDescription());
$product->setActive(true);
$product->setLastStock(true);
$product->setTax($this->entityManager->getRepository(Tax::class)->find(1));
$product->setSupplier($supplier);
$product->setCategories($categories);

$detail = new Detail();
$detail->setArticle($product);
$detail->setInStock(1);
$detail->setNumber($ad->getId());
$detail->setActive(true);
$detail->setArticle($product);

$prices = new ArrayCollection();
$price = new Price();
$price->setPrice($ad->getConsumerPrice());
$price->setArticle($product);
$price->setDetail($detail);
$prices->add($price);
$detail->setPrices($prices);

$product->setMainDetail($detail);

$this->entityManager->persist($product);
$this->entityManager->flush($product);

 

aber auch wenn ich das laststock-Feld auf „nullable“ stelle, werden mir die angelegten Artikel nicht im Backend angezeigt…

Hier stehen die Antworten auf deine beiden Fragen:

https://forum.shopware.com/discussion/comment/225021/#Comment_225021

 

@BestShopPossible‍

ich arbeite analog zu dem Post jetzt mit

$product->setLastStock(1);

trotzdem taucht der Fehler  Integrity constraint violation: 1048 Column ‚laststock‘ cannot be null auf…

warum ich die Artikel nicht im Backend sehen kann, erschließt sich mir aus dem Post jedoch nicht… 

Naja, nach deinem Post zu urteilen, fügst du deinem product ein detail hinzu.

Jetzt schreibst du wieder, dass du laststock beim product setzt. Lies dir den verlinkten Beitrag nochmal genau durch.

@BestShopPossible‍

ich setze laststock beim product und weise das product dann den details zu. Die Details haben keinen Setter für laststock …

 

EDIT: da hatte ich lokal wohl eine veraltete Sourcebasis… ich mach mal ein Update und versuche es erneut

EDIT: mit der neuen Source kann ich laststock jetzt bei Detail setzen und der Insert funktioniert

 

trotzdem sehe ich die nun angelegten Artikel nicht im Shopware-Backend… an was kann das jetzt noch liegen? Kann das was mit diesen unsäglichen Freitextfeldern zu tun haben? Ich hatte irgendwo mal gelesen, man muss die befüllen…

EDIT: ja, es liegt an fehlenden Attributen / Freitextfeldern … ich muss wohl ein Feld als Dummy einfach setzen…

 

danke für eure Hilfe!

Ich mache mir ernsthaft Sorgen.

a) ja, es liegt an fehlenden Attributen / Freitextfeldern -> das hat dir @optimondo‍ doch schon oben geschrieben.

b) und weise das product dann den details zu -> NEIN siehe deine Code-Zeile: 

 

$product->setMainDetail($detail);

 

$detail = new Detail();

$detail->setArticle($product);

$detail->setInStock(1);

$detail->setNumber($ad->getId());

$detail->setActive(true);

$detail->setArticle($product);

 

@BestShopPossible‍ --> mit " weise das product dann den details zu" meinte ich diese fettmarkierte Zeile…

und wo hat jemand was von fehlenden Attributen erwähnt? Bin ich blind? @optimondo‍ hat doch nur auf die Datenstruktur bei der API hingewiesen.

Zu b): OK von mir aus. Kann schon stimmen, ist mir zu müßig mich da reinzulesen.

Zu a)

Nein, er hat darauf hingewiesen, dass es Pflichtfelder gibt, die das System an solchen Stellen natürlich erwartet. Deshalb hat er auf die API verwiesen, dort kann man das nämlich gut sehen. Zumindest an dieser Stelle, davon ausgehend als Startpunkt hätte man dies dann untersuchen können. Da kam dann auch gleich der Hinweis mit, dass das was du vorhast über den Resourcen Manager (wie am Beispiel dargestellt) ziemlich einfach, übersichtlich und erweiterbar inklusive Exception handling möglich ist.

@BestShopPossible‍

das war wohl nicht meine glanzvollste Stunde… habe den Hinweis mit dem Resourcen Manager wohl überlesen und mich nur auf das Codebeispiel fokussiert… sorry und danke euch!

 

bei der Verwendung des Resource Managers tauchen zwar jetzt wieder andere Probleme auf… aber ich will schon gar nicht mehr fragen…

Nur weil ich so seltsam reagiere? Wer nicht fragt bleibt dumm. Wer fragt kriegt nicht immer eine (zufriedenstellende) Antwort. 

Kannst dir jetzt raussuchen was für dich schlimmer ist :wink:

P.S: ich würde dir empfehlen mal die Shopware-Schulungen mit zu machen. 

@BestShopPossible‍

ich hab die Template-Schulung und Zertifizierung absolviert und auch die Developer. Außerdem das Handbuch für Entwickler hier… diese Inhalte waren aber nicht Bestandteil davon… leider… es fehlt mir einfach eine vernünftige Doku ala „How To XXXX“