মাইগ্রেট মডিউলটি সহ স্থানান্তরিত হচ্ছে


8

আমি ড্রুপাল 7 এবং সর্বশেষতম মাইগ্রেট মডিউলটি ব্যবহার করছি। আমি আমার নতুন ডি 7 সাইটে একটি ওপেনকার্ট ডিবি থেকে পণ্য স্থানান্তর করার জন্য একটি শ্রেণি তৈরি করার চেষ্টা করছি। আমি আমার প্রয়োজনীয় সমস্ত এসকিউএল বের করেছি এবং সেই প্রোগ্রামটি বেশিরভাগই পেয়েছি But তবে আমি কীভাবে বিভাগগুলি করতে চলেছি তা বুঝতে আমার একটু সমস্যা হচ্ছে।

আমার মাইগ্রেশন লক্ষ্য উবারকার্ট।

আমি যা বোঝার চেষ্টা করছি সেটি মাইগ্রেট_এক্সেমাল মডিউলে বসে যেটি মাইগ্রেটের একটি সাবমডিউল। বিশেষত আমি ওয়াইনওয়াইনমাইগ্রেশন ক্লাসে ওয়াইন.ইন.সি ফাইলটি দেখছি। আমি মাইগ্রেশন শব্দটি বোঝার চেষ্টা করছি।

আমার দুটি তালিকা রয়েছে যা উবারকার্টের পণ্যগুলিতে শুল্কের শর্ত হয়ে উঠবে। প্রথম বিভাগগুলি। আমি বিভাগগুলি ম্যানুয়ালি সেটআপ করেছি, সুতরাং যখন আমি তাদের উপরের তালিকাটি নিয়ে আসি (GROUP_CONCAT এসকিউএল ফানক ব্যবহার করে) আমার আইডিগুলির একটি গুচ্ছ থাকবে যা আমি একটি অ্যারে ব্যবহার করে মানচিত্র করব যা সমস্ত আইডি রূপান্তরগুলি ধারণ করবে। এটি ঠিক আছে, তবে যখন আমি তাদের BestWith তথ্যের দিকে লক্ষ্য করি যে তারা এগুলি স্থানান্তর করছে তারা বোঝায় যে এটি শব্দটি আমদানি করার জন্য উপরের ওয়াইনবেস্টবিথ শ্রেণিটি ব্যবহার করছে।

আমি এতে বিভ্রান্ত হয়ে পড়েছি কারণ এটি শর্তগুলির একরকম গৌণ স্থানান্তর মত দেখাচ্ছে। এটা কি ঘটছে? আরও, এই স্থানে মাইগ্রেশন ক্লাসে আমি আমার ম্যাপিং অ্যারেটি রাখব এটিই কি?

আমার পরবর্তী কাজটি হ'ল ট্যাগগুলি নিয়ে কাজ করা। ওপেনকার্টে আমাদের কাছে ফ্রি ফর্ম ট্যাগগুলির একটি গুচ্ছ রয়েছে। এবং আমি যখন ওবারকার্টে ম্যানুয়ালি একটি পণ্য তৈরি করি তখন ট্যাগগুলির জন্য আমার একটি স্ব-পরিপূর্ণ ক্ষেত্র থাকে। সেই ক্ষেত্রটিতে আমি কেবলমাত্র কমা দ্বারা পৃথক শর্তগুলির তালিকা রাখতে পারি এবং এটি একাধিক পদ তৈরি করে। মাইগ্রেট মডিউলে আমি কি একই কাজ করতে পারি? আমি কি কেবলমাত্র কমা দ্বারা পৃথক শর্তগুলির তালিকায় ক্ষেত্রটি মানচিত্র করতে পারি? এটি কি প্রতিটি পণ্যের জন্য ট্যাগ যুক্ত করবে?

উত্তর:


14

আমি এখনই একই সমস্যা নিয়ে কাজ করছি তাই আমি আপনার বিভ্রান্তি বুঝতে পারি। আপনার অনেক প্রশ্ন রয়েছে তবে আমি মনে করি এগুলি একটি একক প্রশ্নে সংক্ষিপ্ত করা যেতে পারে:

মাইগ্রেট মডিউলটি কীভাবে একটি সাধারণ ডাটাবেসকে একটি দ্রুপাল ইনস্টলেশনতে স্থানান্তরিত করতে পারে?

এটি অবশ্যই সোজা নয়, তবে এটি কীভাবে কাজ করে তা সম্পর্কে আমার বোঝার বিষয়। আমরা শীর্ষে থেকে (ওয়াইনওয়াইনমাইগ্রেশন) নীচে যাব এবং যাব আমরা প্রশ্ন করব।

WineWineMigrationক্লাসের শীর্ষে কোডটি দেখে আমরা শুরু করি ।

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

এটি মাইগ্রেট মডিউলটিকে বলে যে আপনার ওয়াইন সামগ্রীকে স্থানান্তর করতে, নির্ভরযোগ্য স্থানান্তরগুলি - ওয়াইনভারিটি, ওয়াইনরিজিয়ন, ওয়াইনবেস্টভিথ, ওয়াইনউসার, ওয়াইনপ্রুডস - অবশ্যই প্রথমে সম্পন্ন করতে হবে।

সুতরাং আমরা এখানে যা শিখেছি তা হ'ল মাইগ্রেশন অন্যান্য স্থানান্তরের উপর নির্ভরশীল হতে পারে

এরপরে আমাদের টেবিলে ম্যাপিং রয়েছে যা বর্তমানে বেস ওয়াইন সম্পর্কিত তথ্য এবং ড্রুপাল নোড ধারণ করে:

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

এটি বেশ সহজবোধ্য তাই আপনার যদি স্পষ্টকরণের প্রয়োজন হয় তবে আমি এটি সরবরাহ করব।

আমি এমন কিছু অন্তর্বর্তীকালীন জিনিসপত্র ছেড়ে চলে যাচ্ছি যা বিভিন্ন বিভাগ এবং ওয়াইন বস্তুগুলিকে আঁকিয়ে রাখতে সত্যিই প্রাসঙ্গিক নয়।

এখন আমরা ফিল্ড ম্যাপিংয়ে পৌঁছেছি। পালন:

// 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');

দেখুন যেখানে এটি বলেছেন:

->sourceMigration(...)

এটি মাইগ্রেশনকে নির্দেশ করে যে এই ক্ষেত্রটি মানচিত্র করতে গেলে অন্য একটি স্থানান্তরকে প্রথমে সন্তুষ্ট করতে হবে। আমি বিশ্বাস করি এটি হ'ল "গৌণ স্থানান্তর" যা আপনি বলেছিলেন। regionফিল্ড ম্যাপিং উদাহরণ হিসাবে এখানে ব্যবহার করুন। এটিকে ভেঙে দিচ্ছি ...

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

এটি বলে যে উত্স ডাটাবেসের বিভাগ অঞ্চলটি একটি অঞ্চলের শব্দভান্ডার পদটিতে ম্যাপ করা হয়েছে। টিআইপি মন্তব্যে ফিল্ড ম্যাপিংস কোড অংশ হিসাবে বলা হয়েছে, এটি ধরে নেওয়া হয়েছে যে ম্যাপিংগুলি ফিল্ড-নেমগুলির উপর ভিত্তি করে তৈরি করা হয়েছে, তবে আপনি যেহেতু এটি স্থাপন করার সাথে সাথে আমরা একটি গৌণ স্থানান্তরের উপর নির্ভরশীল তাই আমাদের স্থানান্তর নির্দিষ্ট করতে হবে যা এটি নির্ভর করে এবং এটির নির্দেশ দেয় ক্ষেত্রের নামের পরিবর্তে জোয়ার ব্যবহার করুন।

আপনার উত্স ডাটাবেসে প্রতিটি সাধারণীকরণের টেবিলের জন্য খুব সুন্দর, আপনি প্রত্যেকের জন্য একটি স্থানান্তর নির্দিষ্ট করতে যাচ্ছেন এবং তারপরে সেই ক্ষেত্রগুলির ম্যাপিংগুলিতে সেই টেবিলগুলি অন্তর্ভুক্ত করে আপনি আপনার ক্ষেত্রের ম্যাপিং কলগুলিতে নির্ভরশীল স্থানান্তর নির্দিষ্ট করতে পারবেন পাশাপাশি প্রতিটি স্থানান্তরের শুরুতে নির্ভরশীল মাইগ্রেশন ঘোষণা decla

আশা করি এটা কাজে লাগবে. আমি নিজেও এটিকে পুরোপুরি বুঝতে পারি না তাই মাইগ্রেট কীভাবে ডেটাবেসগুলির সাথে সম্পর্কিত তা বোঝার জন্য আমি এই প্রশ্নটিকে একটি সুযোগ হিসাবে ব্যবহার করেছি। আমি আরও কিছু শিখার সাথে সাথে আমার উত্তরটি আপডেট করব।


1
আপনার কিছু পরিষ্কার করার দরকার হলে আমাকে জানান। পোস্টটি আমি বুঝতে পারি এমন একটি মস্তিষ্কের ডাম্প ...
লেস্টার পিয়াবডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.