в моем очень «редком» случае я должен создать 2 отношения «многие ко многим» для одних и тех же таблиц.
Я объясняю:
У меня есть две таблицы; Монитор и Сервер, имеющие много-много отн, промежуточную таблицу, будут называться «Benchmark». Но в то же время у меня должна быть другая промежуточная таблица, которая может позволить мне связать URL-адрес с монитора с несколькими IP-адресами с серверов (таблица называется "Url_ip")
Итак, вот что я сделал:
Monitor:
tableName: monitor
actAs:
Timestampable: ~
columns:
id : {type: integer(4), primary: true, autoincrement: true}
label: {type: string(45)}
url: {type: string(80)}
frequency: {type: integer}
timeout: {type: integer}
method: {type: enum, values: [GET, POST]}
parameters: {type: string(255)}
relations:
Groups:
class: Groups
local: monitor_id
foreign: sf_guard_group_id
refClass: Alert
Server:
class: Server
local: monitor_id
foreign: server_id
refClass: Benchmark
Server2:
class: Server
local: monitor_id
foreign: server_id
foreignAlias: Ips
refClass: Url_ip
Url_ip:
actAs:
Timestampable: ~
columns:
monitor_id: { type: integer(4), primary: true }
server_id: { type: integer(4), primary: true }
relations:
Monitor:
foreignAlias: IpUrls
Server:
foreignAlias: IpUrls
Benchmark:
tableName: benchmark
actAs:
Timestampable: ~
columns:
monitor_id: { type: integer(4), primary: true }
server_id: { type: integer(4), primary: true }
connexionTime: {type: string(45)}
executionTime: {type: string(45)}
responseTime: {type: string(45)}
responseCode: {type: string(45)}
responseMessage: {type: string(45)}
relations:
Monitor:
foreignAlias: ServerMonitors
Server:
foreignAlias: ServerMonitors
Server:
tableName: server
actAs:
TimeStampable: ~
columns:
id : {type: integer(4), primary: true,autoincrement: true}
name: {type: string(255)}
ip: {type: string(45)}
relations:
Monitor:
class: Monitor
local: server_id
foreign: monitor_id
refClass: Benchmark
Monitor2:
class: Monitor
foreignAlias: monitors
local: server_id
foreign: monitor_id
refClass: Url_ip
Alert:
actAs:
Timestampable: ~
columns:
monitor_id: { type: integer(4), primary: true }
sf_guard_group_id: { type: integer, primary: true }
relations:
Monitor:
foreignAlias: GroupMonitors
sfGuardGroup:
foreignAlias: GroupMonitors
На самом деле это работает, потому что доктрина может создавать соответствующие таблицы.
Проблема при загрузке исправлений. у меня есть эта ошибка:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a c
hild row: a foreign key constraint fails (`sfmonitoring`.`alert`, CONSTRAINT `al
ert_monitor_id_monitor_id` FOREIGN KEY (`monitor_id`) REFERENCES `monitor` (`id`
))
fixures / monitors.yml
Monitor:
monitor_one:
id: 1
label: task1
url: www.task1.com
frequency: 5
timeout: 30
method: GET
parameters: a=1&b=2
monitor_two:
id: 2
label: task2
url: www.task2.com
frequency: 5
timeout: 20
method: POST
parameters: a=11&b=22
monitor_three:
id: 3
label: task3
url: www.task3.com
frequency: 10
timeout: 30
method: GET
parameters: a=111&b=211
fixures / benchmark.yml
Benchmark:
bench_one:
monitor_id: 1
server_id: 1
connexionTime: 25
executionTime: 25
responseTime: 25
responseCode: 200
responseMessage: message de réponse
bench_two:
monitor_id: 2
server_id: 2
connexionTime: 25
executionTime: 25
responseTime: 25
responseCode: 200
responseMessage: message de réponse
bench_three:
monitor_id: 3
server_id: 3
connexionTime: 25
executionTime: 25
responseTime: 25
responseCode: 200
responseMessage: message de réponse
bench_Four:
monitor_id: 1
server_id: 2
connexionTime: 25
executionTime: 25
responseTime: 25
responseCode: 200
responseMessage: message de réponse
fixures / alerts.yml
Alert:
alert_a:
monitor_id: 1
sf_guard_group_id: 1
alert_b:
monitor_id: 2
sf_guard_group_id: 2Alert:
alert_a:
monitor_id: 1
sf_guard_group_id: 1
alert_b:
monitor_id: 2
sf_guard_group_id: 2
HELP ---------> S.O.S