Kategoriezuweisung mit Object2category OXID 6.1.2

#1

Hi,

ich versuche meine Artikel aus einer CSV zu importieren. Das klappt soweit super.
Nun will ich auch einem Artikel eine Category zuweisen beim Artikel. Das mache ich folgendermaßen:

$oObject2Category = oxNew(\OxidEsales\Eshop\Application\Model\Object2Category::class);
$oObject2Category->init(‘oxobject2category’);
$oObject2Category->setProductId(md5($array[$i][1]));
$oObject2Category->setCategoryId(“58517707e26d977f00735cacef2ef2e6”);
$oObject2Category->save();

Klappt soweit auch hervorragend. Allerdings nur, wenn ich einen Artikel neu anlege. Sobald ich das Script noch einmal durchlaufen lassen würde, würde er sagen “Duplicate Entry” Was ja auch soweit Sinn macht.

Aber bei den Artikel konnte ich vorher den Artikel abfragen und prüfen ob er vorhanden ist. Das geht hierbei leider nicht. Habt ihr da einen Tip, wie man das schick machen kann?

Vielen Dank im Voraus.

Viele Grüße

Christopher

#2

man könnte prüfen, ob der Artikel nicht schon in der Kategorie ist.

#3

Ja stimmt, das wäre eine Möglichkeit. Hast du da mal ein Beispiel oder führe ich da einen normalen DB Query aus?

#4

Frage mit einem Query (Kategorie-ID und Produkt-ID) die Oxid ab und arbeite mit load
if(!$oObject2Category->load(“Oxid”))$oObject2Category->save();

#5

wenn es mehrere Kategorien sind, würde ich ein mal alle Zuordnungen für den Artikel aus der DB in ein array holen und dann nur schauen, ob die Zuordnung vorhanden ist.
etwa so:

$kategorien = $DB->getArray('SELECT categoryid FROM object2category WHERE objectid = "oxid-des-artikels"');
if(!in_array("oxid-der-kategorie")) ... Artikel muss der Kategorie zugeordnet werden ...
#6

Das war eine schwere Geburt, eure beiden Lösungsansätze waren gut, leider bin ich noch nicht so ganz bei OXID 6 drin und deswegen ging getArray auf Error weil es Leere Einträge gab.

“Call to a member function getArray() on null [”[object]"

Deswegen bin ich diesen Ansatz gegangen, der auch funktioniert. Hoffe das ist nicht zu schlecht :smiley:

Viele Grüße

Christopher

PS: Hmm wollte eigentlich den Code posten, aber irgendwie kommt da bei mir immer ein 403 Fehler.

#7

Das bedeutet für gewöhnlich, dass etwas nicht defniert ist.

Kommt bei mir auch ständig. Das alte Forum war schon schön, gelle :wink:

#8

Ja so kenne ich das auch, aber wenn der Array keinen Wert zurückbekommt, kommt dann nicht auch die Meldung? Muss ich noch mal testen.

Total schlimm, hab auch vorhin andauern rumprobiert woran es liegt, aber Query stößt er sauer auf und an meiner While Schleife :smiley:

// Get the Result
					if ($resultSet != false && $resultSet->count() > 0) {
						while (!$resultSet->EOF) {
								$row = $resultSet->getFields();
								//do something
								$oObject2Category->load($row[0]);
								$resultSet->fetchRow();
							}
					} 
#9

Ok, jetzt ging posten (zumindest einen Teil) aber bearbeiten nicht :smiley: Oh man, verrücktes Forum.

#10

Das ist die bekloppte CloudFlare Firewall, Marco und ich können da leider nichts machen. Eigentlich müsste da ein catcha kommen, aber weil es nicht angezeigt und gelöst wird, bleibt die Firewall für immer misstrauisch.

1 Like
#11

Eigentlich nicht. Sieht so aus, als ob $DB
nicht definiert ist. Sowas in der Art:

$DB = \OxidEsales\Eshop\Core\DatabaseProvider::getDb();

Aber es geht ja auch anders.

#12

Naja das erklärt zumindest die Problematik :smiley:

Ja natürlich… meine Güte, wieder den Wald vor lauter Bäumen nicht gesehen… Danke :slight_smile: