2016-02-05 2 views
1

Heloo,ключ иностранных один ко многим (PostgreSQL, PHP, yii2)

Я просто новичок с yii2 и PostgreSQL. У меня есть проблема, как это:

Первая таблица:

tbl_printer (PK dept_id and id) 

| dept_id | id | name | 

Второй стол

tbl_printer_group (PK dept_id and id) 

| dept_id | id | printer1 | printer2 | printer3 | 

printer1, printer2, printer3 данные/значение из tbl_printer.id

Я хочу «ЗАПРЕЩЕНО к DELETE 'tbl_printer IF принтер (идентификатор) STILL IN USE на tbl_printer_group (принтер1, принтер2, принтер3). Если не правильный внешний ключ, один к одному от родителя к ребенку, но этот для многих.

Как решить эту проблему, я использую php, yii2 и postgresql.

Спасибо и извините за мой английский

ответ

0

внешнего ключа добавляется через migration с помощью метода addForeignKey():

$this->addForeignKey(
    'name_of_foreign_key_constraint', 
    'products', 
    'category_id', 
    'products_categories', 
    'id', 
    'CASCADE', 
    'CASCADE' 
); 

Последние два варианта для ON UPDATE и ON DELETE соответственно.

Большинство СУБД поддерживают следующие параметры: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL.

Обратите внимание, что вы можете указать массивы вместо category_id и id столбцов:

Если существует несколько столбцов, разделив их запятыми или использовать массив.

Framework обеспечивает наиболее часто используемые и необходимые методы для этого, но помните, что вы всегда можете выполнять пользовательские SQL внутри миграции с просто писать:

$this->execute('YOUR CUSTOM SQL QUERY'); 
+1

Спасибо arogachev, так что я должен написать код в PHP. Я думаю, что мы можем использовать функции базы данных, такие как внешний ключ .... Большое спасибо за ваш ответ – mltobing

+0

@mltobing Мы можем использовать методы миграции для большинства распространенных функций базы данных, но структура не может обеспечить абстракции для всех конкретных функций базы данных, для пример PostgreSQL. – arogachev