Saya bekerja dengan migrate
modul untuk pertama kalinya dan saya telah bekerja dengan db_select
api sedikit, tetapi saya mengalami kesalahan.
Saya mencoba mengubah beberapa label lama menjadi taksonomi drupal. Ketika saya menjelajah ke /admin/content/migrate
halaman, ia melakukan kueri dengan benar dan menunjukkan jumlah baris yang tepat yang harus dimigrasi. Namun, ketika saya benar-benar mencoba menjalankan impor, saya mendapatkan kesalahan ini:
Migrasi gagal dengan pengecualian plugin sumber: SQLSTATE [23000]: Pelanggaran batasan integritas: 1052 Kolom 'labelId' di dalam klausa ambigu
Berikut adalah kode yang saya miliki di kelas LabelMigration saya:
$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('');
Jika saya menghapus leftJoin()
panggilan maka jelas kesalahan tentang on
pernyataan itu hilang, tapi saya tidak mengerti bagaimana labelId
ambigu karena saya selalu merujuknya dengan tabel alias.
Adakah ide dari mana kesalahan ini berasal? Apakah ini berasal dari MigrateSQLMap di bagian atas? Jika demikian, bagaimana saya bisa merujuknya labelId
dengan alias agar tidak ambigu? Saya mencoba membuatnya l.labelId
, tetapi itu tidak berhasil.
Saya berpikir bahwa ia terbenam
alias
ke1
(yaitu, benar boolean), tapi ada alasan itu string - yang adalah alias yang sebenarnya, jadi jika Anda sedang aliasn
,'alias' => 'n'
. Itu sebenarnya menghabiskan biaya sekitar 1/2 jam.sumber