J'utilise symfony 1.4, et mon schéma est le suivant:pourquoi j'obtiens une erreur de contrainte?
Auditor:
columns:
id:
type: integer
autoincrement: true
primary: true
username:
type: string(255)
password:
type: string(255)
fullname:
type: string(255)
is_auditor:
type: integer
is_manager:
type: integer
is_director:
type: integer
Task:
columns:
id:
type: integer
autoincrement: true
primary: true
client:
type: string(255)
start_date:
type: date
end_date:
type: date
assigned_by:
type: string(255)
comments:
type: string
status:
type: integer
relations:
Auditors:
foreignAlias: Tasks
class: Auditor
refClass: AuditorTask
AuditorTask:
columns:
id:
type: integer
autoincrement: true
primary: true
auditor_id:
type: integer
primary: true
task_id:
type: integer
primary: true
relations:
Auditor:
foreignAlias: AuditorTasks
Task:
foreignAlias: AuditorTasks
Expense:
columns:
id:
type: integer
autoincrement: true
primary: true
auditor_task_id:
type: integer
date:
type: date
hours_spent:
type: integer
transport_cost:
type: float
remarks:
type: string
relations:
AuditorTask:
foreignAlias: Expenses
lorsque je tente de créer une nouvelle tâche, je reçois l'erreur suivante:
SQLSTATE [HY000]: Erreur générale: 1452 Impossible d'ajouter ou mettre à jour une ligne enfant: une contrainte de clé étrangère échoue
auditeur et a une tâche beaucoup à de nombreux rapports (ehr
auditor_task
, cONTRAINTE auditor_task_id_expense_auditor_task_id
FOREIGN KEY (id
) RÉFÉRENCES expense
(auditor_task_id
).) hanche. ainsi la table de jonction. les auditeurs peuvent avoir des commentaires concernant la tâche, donc j'utilise la relation un à plusieurs entre auditortask et les dépenses.
des idées?
ok voici une trace du débogage.
1 Info sfPatternRouting Match route "default" (/:module/:action/*) for /task/create with parameters array ('module' => 'task', 'action' => 'create',)
2 Info sfFilterChain Executing filter "sfRenderingFilter"
3 Info sfFilterChain Executing filter "sfExecutionFilter"
4 Info taskActions Call "taskActions->executeCreate()"
5 Info Doctrine_Connection_Mysql exec : SET NAMES 'UTF8' -()
6 Info Doctrine_Connection_Statement execute : SELECT COUNT(*) AS num_results FROM auditor a WHERE a.id IN (?) - (1)
7 Info Doctrine_Connection_Statement execute : SELECT a.id AS a__id, a.username AS a__username, a.password AS a__password, a.fullname AS a__fullname, a.is_auditor AS a__is_auditor, a.is_manager AS a__is_manager, a.is_director AS a__is_director FROM auditor a WHERE (a.id IN (?)) - (1)
8 Info Doctrine_Connection_Statement execute : INSERT INTO task (client, start_date, end_date, assigned_by, comments, status) VALUES (?, ?, ?, ?, ?, ?) - (Falcon Limited, 2005-01-02, 2005-02-02, mr manager one, asap., 0)
9 Info Doctrine_Connection_Statement execute : INSERT INTO auditor_task (auditor_id, task_id) VALUES (?, ?) - (1, 1)
10 Error Doctrine_Connection_Mysql_Exception SQLSTATE[HY000]: General error: 1452 Cannot add or update a child row: a foreign key constraint fails (`ehr`.`auditor_task`, CONSTRAINT `auditor_task_id_expense_auditor_task_id` FOREIGN KEY (`id`) REFERENCES `expense` (`auditor_task_id`))
11 Info sfWebResponse Send status "HTTP/1.1 500 Internal Server Error"
12 Info sfWebResponse Send header "Content-Type: text/html; charset=utf-8"
Obtenez-vous une trace de pile? Si oui, postez le s'il vous plait, sinon essayez d'en obtenir un ... – greg0ire
Votre schéma schema.yml semble cassé: il devrait y avoir plus de sauts de ligne (avant les relations par exemple). Qu'avez-vous comme task_id pour la tâche nouvellement créée (la réponse devrait être 1). Et essayez d'obtenir plus de réputation (en remplissant votre profil, par exemple), afin que vous puissiez poster des commentaires. – greg0ire
hé, désolé je n'ai pas remarqué qu'il soit si cassé. c'est seulement cassé quand je l'ai collé ici. sinon ce n'est pas cassé dans mon fichier actuel. Quelqu'un m'a dit que je ne suis pas censé avoir l'ID dans la table de jonction, mais c'est nécessaire pour la relation un à plusieurs. – han