Frage

ich habe eine Erweiterung zu installieren, wird der folgende code in der setup-Datei

$installer->addAttribute('customer', 'facebook_uid', array(
        'type'   => 'varchar',
        'label'     => 'Facebook Uid',
        'visible'   => false,
        'required'  => false
));

der code ist aber " Konflikt mit vorhandener Datenbank, habe ich diese manuell hinzufügen, über backend-oder phpmyadmin

War es hilfreich?

Lösung

Also in Erster Linie bitte fügen Sie keine Gegenstände über mysql, dies könnte Probleme verursachen

Zweitens, wenn Sie möchten, fügen Sie die Attribute zu den Kunden, ohne Sie ein Skript erstellen, dann gibt es einige Erweiterungen, die das tun

Schließlich, das ist eigentlich keine so schlechte Frage, wenn Sie einfach wissen wollen, was "unter der Haube" beim hinzufügen von Attributen, also werde ich versuchen und beantworten diese für Sie.

Wird der entity-Typ id

Zuerst findet er heraus, welche entity-Typ wir sind Umgang mit.Mit den Standard-Daten-Kunde 1.

$entityTypeId = $this->getEntityTypeId($entityTypeId);

Bereitet die Daten

Dann von allen Informationen, die Sie gegeben haben, die der Funktion set-up ein array von Daten, für Ihr Beispiel sieht es wie folgt aus.

array(23) {
  ["entity_type_id"]=>
  string(1) "1"
  ["attribute_code"]=>
  string(12) "facebook_uid"
  ["backend_model"]=>
  NULL
  ["backend_type"]=>
  string(7) "varchar"
  ["backend_table"]=>
  NULL
  ["frontend_model"]=>
  NULL
  ["frontend_input"]=>
  string(4) "text"
  ["frontend_label"]=>
  string(12) "Facebook Uid"
  ["frontend_class"]=>
  NULL
  ["source_model"]=>
  NULL
  ["is_required"]=>
  int(0)
  ["is_user_defined"]=>
  int(0)
  ["default_value"]=>
  NULL
  ["is_unique"]=>
  int(0)
  ["note"]=>
  NULL
  ["is_global"]=>
  int(1)
  ["is_visible"]=>
  int(0)
  ["is_system"]=>
  int(1)
  ["input_filter"]=>
  NULL
  ["multiline_count"]=>
  int(0)
  ["validate_rules"]=>
  NULL
  ["data_model"]=>
  NULL
  ["sort_order"]=>
  int(0)
}

Werden die Daten überprüft,

Dann werden die Daten überprüft und bewegt sich auf das einfügen/aktualisieren

$attributeId = $this->getAttribute($entityTypeId, $code, 'attribute_id');
if ($attributeId) {
    $this->updateAttribute($entityTypeId, $attributeId, $data, null, $sortOrder);
} else {
    $this->_insertAttribute($data);
}

Nehmen wir also an, wir machen ein legen Sie den Fall, in meinem Fall sind wir ;) Nun kommen wir zu unserem ersten sql-Abfrage, YEAH!, und es sieht so aus.

INSERT INTO
  `eav_attribute` (
    `entity_type_id`,
    `attribute_code`,
    `backend_model`,
    `backend_type`,
    `backend_table`,
    `frontend_model`,
    `frontend_input`,
    `frontend_label`,
    `frontend_class`,
    `source_model`,
    `is_required`,
    `is_user_defined`,
    `default_value`,
    `is_unique`,
    `note`
  ) VALUES (
    1,
    "facebook_uid",
    NULL,
    "varchar",
    NULL,
    NULL,
    "text",
    "Facebook Uid",
    NULL,
    NULL,
    0,
    0,
    NULL,
    0,
    NULL
)

Es nimmt die Letzte insert-id und führt ein anderes einfügen, um zusätzliche Tabellen basierend auf dem Attribut entity-Typ.In unserem Fall ist das customer_eav_attribute wo 967 ist die attribute_id, dass wir gerade eingefügt.

INSERT INTO
  `customer_eav_attribute` (
    `attribute_id`,
    `is_visible`,
    `is_system`,
    `input_filter`, 
    `multiline_count`, 
    `validate_rules`, 
    `data_model`, 
    `sort_order`
  ) VALUES (
    967,
    0,
    1,
    NULL,
    0,
    NULL,
    NULL,
    0
  )

Fügt das Attribut zu setzen

Da wir weiterhin, wie es fügt Attribute, die Sie sehen, die Attribut Hinzugefügt wird, eine Gruppe oder gesetzt werden.In unserem Fall ist nur ein Satz, also lasst uns sehen, was passiert mit der Datenbank.

Also zuerst überprüfen wir, ob der Satz angefügt, um das Attribut mit dem folgenden wählen.

SELECT
    `eav_entity_attribute`.*
FROM
    `eav_entity_attribute`
WHERE
    (attribute_set_id = 1)
    AND (attribute_id = 967)

Aber da haben wir nichts zurück von diesem wählen wir bewegen uns auf einem anderen einfügen, die wie folgt aussieht:

INSERT INTO
  `eav_entity_attribute` (
    `entity_type_id`, 
    `attribute_set_id`, 
    `attribute_group_id`, 
    `attribute_id`, 
    `sort_order`
  ) VALUES (
    1,
    1,
    1,
    967,
    111
  )

Fügt Optionen

Endlich ist es dann fügt das Attribut Möglichkeiten, wenn wir welche haben, aber Glück, wir haben keine Ursache, ich bin ein bisschen krank von sql jetzt.

if (isset($attr['option']) && is_array($attr['option'])) {
    $option = $attr['option'];
    $option['attribute_id'] = $this->getAttributeId($entityTypeId, $code);
    $this->addAttributeOption($option);
}

Abschließender Hinweis

Und das ist es alle sql könnte man wünschen, dass er Sie wirklich wollte, um es so zu machen, aber bitte, bitte, bitte tun Sie es nicht über direkte sql-und bitte erstellen Sie entweder ein Skript oder eine Erweiterung installieren, aber wenn Sie wollen, zu tun, die es über sql-dann stellen Sie sicher, dass Sie über eine Sicherung verfügen, bevor Sie beginnen :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top