প্রোগ্রামিয়ালি কোনও টেবিলে একটি বিদেশী কী কীভাবে যুক্ত করবেন?


22

আমি নতুন টেবিলগুলির একটি সেট যুক্ত করার চেষ্টা করছি এবং আমি এই টেবিলগুলি লিঙ্ক করতে একটি বিদেশী কী যুক্ত করার চেষ্টা করছি। আমি অনলাইনে চেষ্টা করেছি এবং এ সম্পর্কিত কিছু তথ্য addForeignKey()খুঁজে পেতে চেয়েছি তবে কিছুই পাই না।

তাকিয়ে দেখলাম Varien_Db_Adapter_Interface::addForeignKey()এবং Mage_Core_Model_Resource_Setup::getFkName()আমি ভেবেছিলাম আমি সঠিকভাবে সেট আপটি সঠিকভাবে পেয়েছি

->addForeignKey(
     $installer->getFkName('namespace_module/shop', 'area_id', 'namespace_module/area','area_id'),
     $installer->getTable('namespace_module/shop'), 
     'area_id',
     $installer->getTable('namespace_module/area'), 
     'area_id',
     Varien_Db_Ddl_Table::ACTION_CASCADE, 
     Varien_Db_Ddl_Table::ACTION_CASCADE
)  

তবে ব্যতিক্রম অন্যরকম বলে

Zend_Db_Exception Object
(
[_previous:Zend_Exception:private] => 
[message:protected] => Undefined column "shop_locator_shop"
[string:Exception:private] => 
[code:protected] => 0
[file:protected] => /Users/myname/Sites/site/www/lib/Varien/Db/Ddl/Table.php
[line:protected] => 450
[trace:Exception:private] => Array
    (
        [0] => Array
            (
                [file] => /Users/myname/Sites/site/www/app/code/local/Namespace/Module/sql/namespace_module_setup/install-0.1.0.php
                [line] => 110
                [function] => addForeignKey
                [class] => Varien_Db_Ddl_Table
                [type] => ->
                [args] => Array
                    (
                        [0] => FK_SHOP_LOCATOR_SHOP_AREA_ID_SHOP_LOCATOR_AREA_AREA_ID
                        [1] => shop_locator_shop
                        [2] => area_id
                        [3] => shop_locator_area
                        [4] => area_id
                        [5] => CASCADE
                        [6] => CASCADE
                    )

            )

মূলত আমি কীভাবে আমার টেবিলে একটি বিদেশী কী যুক্ত করতে যাব (আমি কী অর্জন করতে চাইছি তার একটি স্ক্রিন শট যুক্ত করেছি)

ডাটাবেসের

উত্তর:


29

এটির মতো চেষ্টা করুন:

->addForeignKey(
     $installer->getFkName('namespace_module/shop', 'area_id', 'namespace_module/area','area_id'),
     'area_id',
     $installer->getTable('namespace_module/area'), 
     'area_id',
     Varien_Db_Ddl_Table::ACTION_CASCADE, 
     Varien_Db_Ddl_Table::ACTION_CASCADE
)  

আমার কোডের পার্থক্য হ'ল আমি নীচের প্রথম লাইনটি সরিয়েছি getFkName
যেহেতু আপনি addForeignKeyকোনও টেবিলে এটি তৈরি করার সময় কল করছেন তাই আপনার আর এটির নাম উল্লেখ করার দরকার নেই।

সাধারণ নিয়মের ব্যবহার হিসাবে:

->addForeignKey(
     $installer->getFkName('TABLE ALIAS', 'FK_FIELD', 'REF_TABLE_ALIAS','REF_TABLE_FIELD'),
     'CURRENT_TABLE_FIELD_NAME',
     $installer->getTable('REF_TABLE_ALIAS'), 
     'REF_TABLE_FIELD',
     Varien_Db_Ddl_Table::ACTION_CASCADE, 
     Varien_Db_Ddl_Table::ACTION_CASCADE
)  

[সম্পাদনা]
আপনার দিকে নজর দেওয়া উচিত Varien_Db_Ddl_Table::addForeignKeyকারণ আপনি এটি একটি উদাহরণে ব্যবহার করছেন Varien_Db_Ddl_Table

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