Taşıma başarısızlığı: maddede belirsiz


9

Ben ile çalışıyorum migrateilk kez modülü ve ben çalıştığım db_selectAPI biraz ama bir hata içine çalıştırıyorum.

Bazı eski etiketleri bir drupal taksonomiye dönüştürmeye çalışıyorum. Sayfaya göz attığımda /admin/content/migrate, sorgumu doğru bir şekilde yapıyor ve taşınması gereken doğru satır sayısını gösteriyor. Ancak, aslında alma çalıştırmak çalıştığınızda, bu hatayı alıyorum:

Kaynak eklentisi istisnasıyla taşıma başarısız oldu: SQLSTATE [23000]: Bütünlük kısıtlaması ihlali: 1052 yan tümcesinde 'labelId' sütunu belirsiz

İşte benim LabelMigration sınıfındaki kod:

$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()Çağrıları kaldırırsam, o zaman onifade ile ilgili hata gider, ama labelIdher zaman bir tablo diğer adı ile başvuruyorum çünkü belirsiz olduğunu anlamıyorum .

Bu hatanın nereden geldiğine dair bir fikrin var mı? En üstteki MigrateSQLMap'ten mi geliyor? Öyleyse, labelIdbelirsiz olmayan hale getirmek için bir takma adla nasıl başvurabilirim ? Yapmayı denedim l.labelId, ama işe yaramadı.

Yanıtlar:


30

Anladım!

MigrateSQLMap alan tanımlarken alan için bir tablo diğer adı ayarlayabilirsiniz:

$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'Markaları labelIdhaline l.labelIdsorgularda.


Teşekkürler. Aynı sorun vardı. Cevabınızı doğru olarak işaretlemelisiniz.
Perisdr

Aynı sorun ... ve çözüm mükemmel çalışıyor. Bu konuda çok fazla saat geçirdim! Düzeltmeyi gönderdiğiniz için teşekkür ederiz.
deniz26.2

Bu küçük parça için madalyayı hak ediyorsun.
doublejosh

1

Ben o batıyordu düşündüm aliasiçin 1sen takma eğer öyleyse, gerçek takma - (yani boolean true), ama bir dize var bir sebebi var n, 'alias' => 'n'. Bu aslında yaklaşık 1/2 saat bana mal oldu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.