माइग्रेट विफलता: क्लाज पर अस्पष्ट है


9

मैं migrateपहली बार मॉड्यूल के साथ काम कर रहा हूं और मैंने db_selectएपीआई के साथ थोड़ा काम किया है , लेकिन मैं एक त्रुटि में चल रहा हूं।

मैं कुछ पुराने लेबल को ड्रुपल टैक्सोनॉमी में बदलने की कोशिश कर रहा हूं। जब मैं /admin/content/migrateपृष्ठ पर ब्राउज़ करता हूं, तो यह मेरी क्वेरी को सही ढंग से करता है और उन पंक्तियों की सही संख्या दिखाता है जिन्हें माइग्रेट किया जाना चाहिए। हालाँकि, जब मैं वास्तव में आयात को चलाने की कोशिश करता हूं, तो मुझे यह त्रुटि मिलती है:

स्रोत प्लग-इन अपवाद के साथ माइग्रेशन विफल हुआ: SQLSTATE [23000]: अखंडता बाधा उल्लंघन: 1052 कॉलम 'लेबलआईड' इन क्लॉज पर अस्पष्ट है

यहां मेरा लेबल माइग्रेशन क्लास में कोड है:

$this->map = new MigrateSQLMap($this->machineName,

    array(
        'labelId' => array('type' => 'int', 'not null' => TRUE)
    ),
    MigrateDestinationTerm::getKeySchema()
);
$query = db_select('migrate_account_label', 'l')
         ->fields('l', array('labelId', 'label'))
;

$query->leftJoin('migrate_asset_labels_membership', 'lm', 'l.labelId = lm.labelId');
$query->leftJoin('migrate_asset', 'a', 'lm.assetId = a.assetId');
$query->addExpression('count(*)', 'num');
$query->condition('a.type', 'B');
$query->groupBy('l.labelId');
$query->groupBy('l.label');

$this->source = new MigrateSourceSQL($query);

// Set up our destination - terms in the vocabulary
$this->destination = new MigrateDestinationTerm('article_labels');

$this->addFieldMapping('name', 'label');
$this->addFieldMapping('description')
    ->defaultValue('');

यदि मैं leftJoin()कॉल हटाता हूं तो जाहिर है कि onस्टेटमेंट के बारे में त्रुटि दूर हो जाती है, लेकिन मुझे समझ नहीं आता कि कैसे labelIdअस्पष्ट है क्योंकि मैं इसे हमेशा टेबल एलीस के साथ संदर्भित कर रहा हूं।

कोई भी विचार जहां यह त्रुटि आ रही है? क्या यह शीर्ष पर MigrateSQLMap से आ रहा है? यदि हां, तो मैं labelIdइसे गैर-अस्पष्ट बनाने के लिए एक उपनाम के साथ कैसे संदर्भित कर सकता हूं ? मैंने इसे बनाने की कोशिश की l.labelId, लेकिन यह काम नहीं किया।

जवाबों:


30

पता लगा लिया!

माइग्रेटक्यूएसक्यूप में क्षेत्र को परिभाषित करते समय मैं क्षेत्र के लिए एक तालिका उपनाम सेट कर सकता हूं:

$this->map = new MigrateSQLMap($this->machineName,
    array(
        'labelId' => array(
            'type' => 'int',
            'not null' => TRUE,
            'alias' => 'l', // it's the letter small case "L", not the digit 1
        )
    ),
    MigrateDestinationTerm::getKeySchema()
);

'alias' => 'l'बनाता labelIdबन l.labelIdप्रश्नों में।


धन्यवाद। एक ही समस्या थी। आपको अपना उत्तर सही होना चाहिए।
पेरिसड्र

एक ही समस्या ... और समाधान पूरी तरह से काम करता है। मैंने इस पर कई घंटे बिताए हैं! फिक्स पोस्ट करने के लिए धन्यवाद।
सी २६.२

आप उस tid बिट के लिए एक पदक के लायक हैं।
डबलजॉश

1

मैंने सोचा था कि वह की स्थापना की गई थी aliasकरने के लिए 1(यानी, बूलियन सच है), लेकिन वहाँ एक कारण यह एक स्ट्रिंग है - वास्तविक उर्फ है कि, इसलिए अगर आपका नाम है n, 'alias' => 'n'। वास्तव में मुझे लगभग 1/2 घंटा खर्च करना पड़ा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.