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.