Di chuyển với mô-đun di chuyển


8

Tôi đang sử dụng Drupal 7 và mô-đun Migrate mới nhất. Tôi đang cố gắng tạo một lớp để di chuyển các sản phẩm từ OpenCart DB vào trang web D7 mới của tôi. Tôi đã tìm ra tất cả SQL tôi cần và đã được lập trình hầu hết trong số đó. Nhưng tôi gặp một chút khó khăn khi hiểu cách tôi sẽ thực hiện các danh mục.

Mục tiêu di chuyển của tôi là Ubercart.

Những gì tôi đang cố gắng hiểu nằm trong mô-đun Migrate_example là mô hình con của Di chuyển. Cụ thể tôi đang xem tập tin Wine.inc tại lớp WineWineMigration. Tôi đang cố gắng để hiểu các thuật ngữ di chuyển.

Tôi có hai danh sách sẽ trở thành thuật ngữ phân loại trong các sản phẩm Ubercart. Đầu tiên là các chuyên mục. Tôi đã thiết lập các danh mục theo cách thủ công, vì vậy khi tôi đưa danh sách các danh mục đó (sử dụng func GROUP_CONCAT), tôi sẽ có một loạt ID mà tôi sẽ ánh xạ bằng một mảng sẽ giữ tất cả các chuyển đổi ID. Điều đó là tốt, nhưng khi tôi xem thông tin BestWith của họ rằng họ đang di chuyển thì nó cho thấy rằng họ đang sử dụng lớp WineBestWith ở trên để nhập thuật ngữ.

Tôi bối rối bởi điều này bởi vì nó trông giống như một số loại điều khoản di chuyển thứ cấp. Có phải đó là những gì đang xảy ra? Hơn nữa, đây có phải là nơi tôi sẽ đặt mảng ánh xạ của mình, trong lớp di chuyển thuật ngữ này không?

Điều tiếp theo tôi cần làm là đối phó với các thẻ. Trong OpenCart, chúng tôi có một loạt các thẻ biểu mẫu miễn phí. Và khi tôi tự tạo một sản phẩm trong Ubercart, tôi có trường tự động hoàn thành cho các thẻ. Trong trường đó tôi chỉ có thể đưa vào một danh sách các thuật ngữ được phân tách bằng dấu phẩy và nó tạo ra nhiều thuật ngữ. Tôi có thể làm điều tương tự trong mô-đun Di chuyển không? Tôi chỉ có thể ánh xạ trường vào danh sách các thuật ngữ được phân tách bằng dấu phẩy? Điều đó sẽ thêm các thẻ trong đó cho mỗi sản phẩm?

Câu trả lời:


14

Tôi đang làm việc với cùng một vấn đề ngay bây giờ để tôi hiểu sự nhầm lẫn của bạn. Bạn có rất nhiều câu hỏi, nhưng tôi nghĩ chúng có thể được tóm tắt thành một câu hỏi số ít:

Làm thế nào để mô-đun Migrate xử lý việc di chuyển cơ sở dữ liệu đã chuẩn hóa vào bản cài đặt Drupal?

Nó chắc chắn không đơn giản, nhưng đây là sự hiểu biết của tôi về cách thức hoạt động. Chúng ta sẽ bắt đầu từ đầu (WineWineMigration) đi xuống và đặt câu hỏi khi chúng ta đi.

Chúng tôi bắt đầu bằng cách nhìn vào mã ở đầu WineWineMigrationlớp.

...
$this->dependencies = array('WineVariety', 'WineRegion',
  'WineBestWith', 'WineUser', 'WineProducer');
...

Điều này nói với mô-đun Di chuyển rằng để di chuyển nội dung Wine của bạn, việc di chuyển phụ thuộc - WineVariety, WineRegion, WineBestWith, WineUser, Wine sản xuất - phải được hoàn thành trước tiên.

Vì vậy, những gì chúng ta đã học được ở đây là di cư có thể phụ thuộc vào di cư khác .

Tiếp theo, chúng ta có ánh xạ giữa bảng hiện chứa thông tin rượu cơ sở và nút Drupal:

$this->map = new MigrateSQLMap($this->machineName,
  array(
    'wineid' => array(
      'type' => 'int',
      'unsigned' => TRUE,
      'not null' => TRUE,
      'description' => 'Wine ID',
      'alias' => 'w',
    )
  ),
  MigrateDestinationNode::getKeySchema()
);

Điều này khá đơn giản vì vậy nếu bạn cần làm rõ tôi sẽ cung cấp nó.

Tôi sẽ bỏ qua một số thứ tạm thời không thực sự thích hợp để kết nối các danh mục và đối tượng rượu khác nhau.

Bây giờ chúng ta đến bản đồ trường. Quan sát:

// Mapped fields
$this->addFieldMapping('title', 'name')
     ->description(t('Mapping wine name in source to node title'));
$this->addFieldMapping('uid', 'accountid')
     ->sourceMigration('WineUser')
     ->defaultValue(1);
// TIP: By default, term relationship are assumed to be passed by name.
// In this case, the source values are IDs, so we specify the relevant
// migration (so the tid can be looked up in the map), and tell the term
// field handler that it is receiving tids instead of names
$this->addFieldMapping('migrate_example_wine_varieties', 'variety')
     ->sourceMigration('WineVariety')
     ->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('migrate_example_wine_regions', 'region')
     ->sourceMigration('WineRegion')
     ->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('migrate_example_wine_best_with', 'best_with')
     ->separator(',')
     ->sourceMigration('WineBestWith')
     ->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('field_migrate_example_wine_ratin', 'rating');
$this->addFieldMapping('field_migrate_example_top_vintag', 'best_vintages');

Xem nơi nó nói:

->sourceMigration(...)

Điều này cho biết việc di chuyển rằng để ánh xạ trường này, trước tiên phải di chuyển một di chuyển khác. Tôi tin rằng đây là "di cư thứ cấp" mà bạn đã nói đến. Hãy sử dụng regionánh xạ trường làm ví dụ ở đây. Phá vỡ nó ...

$this->addFieldMapping('migrate_example_wine_regions', 'region')
     ->sourceMigration('WineRegion')
     ->arguments(array('source_type' => 'tid'));

Điều này nói rằng khu vực danh mục trong cơ sở dữ liệu nguồn được ánh xạ tới một thuật ngữ từ vựng khu vực. Vì nhận xét TIP nêu trong đoạn mã ánh xạ trường, nó giả định rằng ánh xạ được tạo dựa trên trường_names, nhưng vì chúng tôi phụ thuộc vào di chuyển thứ cấp khi bạn đặt nó, nên chúng tôi cần chỉ định di chuyển phụ thuộc vào nó và hướng dẫn nó sử dụng tids thay vì tên trường.

Quá nhiều cho mỗi bảng được chuẩn hóa trong cơ sở dữ liệu nguồn của bạn, bạn sẽ chỉ định di chuyển cho từng bảng và sau đó trong ánh xạ trường có liên quan đến các bảng đó, bạn sẽ chỉ định di chuyển phụ thuộc trong các lệnh gọi ánh xạ trường của bạn , cũng như khai báo di chuyển phụ thuộc vào đầu mỗi di chuyển.

Tôi hi vọng cái này giúp được. Tôi hoàn toàn không hiểu điều này vì vậy tôi đã sử dụng câu hỏi này như một cơ hội để nâng cao hiểu biết của mình về cách Di chuyển liên quan đến cơ sở dữ liệu. Khi tôi tìm hiểu thêm một chút, tôi sẽ cập nhật câu trả lời của mình cho phù hợp.


1
Hãy cho tôi biết nếu bạn cần bất cứ điều gì làm rõ. Bài đăng là một chút của một bãi rác não tôi nhận ra ...
Lester Peabody
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.