আমি এখনই একই সমস্যা নিয়ে কাজ করছি তাই আমি আপনার বিভ্রান্তি বুঝতে পারি। আপনার অনেক প্রশ্ন রয়েছে তবে আমি মনে করি এগুলি একটি একক প্রশ্নে সংক্ষিপ্ত করা যেতে পারে:
মাইগ্রেট মডিউলটি কীভাবে একটি সাধারণ ডাটাবেসকে একটি দ্রুপাল ইনস্টলেশনতে স্থানান্তরিত করতে পারে?
এটি অবশ্যই সোজা নয়, তবে এটি কীভাবে কাজ করে তা সম্পর্কে আমার বোঝার বিষয়। আমরা শীর্ষে থেকে (ওয়াইনওয়াইনমাইগ্রেশন) নীচে যাব এবং যাব আমরা প্রশ্ন করব।
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
আশা করি এটা কাজে লাগবে. আমি নিজেও এটিকে পুরোপুরি বুঝতে পারি না তাই মাইগ্রেট কীভাবে ডেটাবেসগুলির সাথে সম্পর্কিত তা বোঝার জন্য আমি এই প্রশ্নটিকে একটি সুযোগ হিসাবে ব্যবহার করেছি। আমি আরও কিছু শিখার সাথে সাথে আমার উত্তরটি আপডেট করব।