프로그래밍 방식으로 테이블에 외래 키를 추가하는 방법은 무엇입니까?


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::addForeignKeyVarien_Db_Ddl_Table

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.