Je veux faire une copie, une "deepcopy", via la méthode copyinto d'un
objet OffrePrix avec des tables jointes. Toute la ligne est belle et
bien recopiée mais les clés primaire des tables jointes sont
initialisée à NULL. Par conséquant, une erreur se produit lors de
l'écriture de ces lignes dans la base de donnée.

J'ai besoin d'aide pour savoir s'il s'agit de mon erreur ou pas, et
d'en déterminer la cause.

Le log symfony :

$ tail -f log/frontend_xxx_dev.log
Aug 18 11:29:13 symfony [info] {sfContext} initialization
Aug 18 11:29:13 symfony [info] {sfController} initialization
Aug 18 11:29:13 symfony [info] {sfRouting} match route [default]
"/:module/:action/*"
Aug 18 11:29:13 symfony [info] {sfRequest} request parameters array
(  'module' => 'offreprix',  'action' => 'duplication',  'off_code' =>
'3',)
Aug 18 11:29:13 symfony [info] {sfController} dispatch request
Aug 18 11:29:13 symfony [info] {sfFilter} executing filter
"sfRenderingFilter"
Aug 18 11:29:13 symfony [info] {sfFilter} executing filter
"sfWebDebugFilter"
Aug 18 11:29:13 symfony [info] {sfFilter} executing filter
"sfBasicSecurityFilter"
Aug 18 11:29:13 symfony [info] {sfFilter} executing filter
"sfCommonFilter"
Aug 18 11:29:13 symfony [info] {sfFilter} executing filter
"sfFlashFilter"
Aug 18 11:29:13 symfony [info] {sfFilter} executing filter
"sfExecutionFilter"
Aug 18 11:29:13 symfony [info] {sfAction} call "offreprixActions-
>executeDuplication()"
Aug 18 11:29:13 symfony [info] {sfCreole} connect(): DSN: array
(   'compat_assoc_lower' => NULL,   'compat_rtrim_string' => NULL,
'database' => NULL,   'encoding' => NULL,   'hostspec' => '//srvxxx/
XE',   'password' => 'xxx',   'persistent' => NULL,   'phptype' =>
'oracle',   'port' => NULL,   'protocol' => NULL,   'socket' =>
NULL,   'username' => 'xxx', ), FLAGS: 0
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
OFFRE_PRIX.OFF_CODE, OFFRE_PRIX.OFF_OFF_CODE, OFFRE_PRIX.ROF_CODE,
OFFRE_PRIX.CHA_CODE, OFFRE_PRIX.TOF_CODE, OFFRE_PRIX.AOF_CODE,
OFFRE_PRIX.COL_CODE, OFFRE_PRIX.MOF_CODE, OFFRE_PRIX.MEO_CODE,
OFFRE_PRIX.ICH_CODE, OFFRE_PRIX.NOF_CODE, OFFRE_PRIX.OFF_LIB,
OFFRE_PRIX.OFF_REFCLI, OFFRE_PRIX.OFF_DATCOM, OFFRE_PRIX.OFF_DATLIV,
OFFRE_PRIX.OFF_DATVALID, OFFRE_PRIX.OFF_CMT, OFFRE_PRIX.OFF_CMTCLI,
OFFRE_PRIX.OFF_INDFNR, OFFRE_PRIX.OFF_APPADV, OFFRE_PRIX.OFF_SAISIADV,
OFFRE_PRIX.OFF_EXECUTION, OFFRE_PRIX.CREATED_AT,
OFFRE_PRIX.CREATED_BY, OFFRE_PRIX.UPDATED_AT, OFFRE_PRIX.UPDATED_BY,
OFFRE_PRIX.OFF_EXTERNE FROM OFFRE_PRIX WHERE OFFRE_PRIX.OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} beginning transaction.
Aug 18 11:29:13 symfony [info] {sfCreole} beginning transaction.
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): INSERT
INTO OFFRE_PRIX
(TOF_CODE,MOF_CODE,NOF_CODE,OFF_LIB,OFF_DATVALID,OFF_INDFNR,OFF_APPADV,OFF_EXECUTION,CREATED_AT,CREATED_BY,UPDATED_AT,UPDATED_BY,OFF_CODE)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
Aug 18 11:29:13 symfony [info] {sfCreole} committing transaction.
Aug 18 11:29:13 symfony [info] {sfCreole} committing transaction.
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
AGENDA.AGE_CODE, AGENDA.CTC_CODE, AGENDA.UTI_CODE, AGENDA.AGE_REALISE,
AGENDA.CON_CODE, AGENDA.NAG_CODE, AGENDA.TAG_CODE, AGENDA.AGE_DESC,
AGENDA.AGE_OBJDET, AGENDA.AGE_CPTRENDU, AGENDA.AGE_COORD,
AGENDA.AGE_DATHEURE, AGENDA.AGE_DNEXTVIS, AGENDA.AGE_COMNEXTVIS,
AGENDA.CREATED_AT, AGENDA.CREATED_BY, AGENDA.UPDATED_AT,
AGENDA.UPDATED_BY, AGENDA.AGE_HEUREFIN, AGENDA.CHA_CODE,
AGENDA.OFF_CODE FROM AGENDA WHERE AGENDA.OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
INT_AGE.INT_CODE, INT_AGE.AGE_CODE, INT_AGE.CREATED_AT,
INT_AGE.CREATED_BY, INT_AGE.UPDATED_AT, INT_AGE.UPDATED_BY FROM
INT_AGE WHERE INT_AGE.AGE_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
AGE_THE.AGE_CODE, AGE_THE.THE_CODE, AGE_THE.CREATED_AT,
AGE_THE.CREATED_BY, AGE_THE.UPDATED_AT, AGE_THE.UPDATED_BY FROM
AGE_THE WHERE AGE_THE.AGE_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
INT_AGE.INT_CODE, INT_AGE.AGE_CODE, INT_AGE.CREATED_AT,
INT_AGE.CREATED_BY, INT_AGE.UPDATED_AT, INT_AGE.UPDATED_BY FROM
INT_AGE WHERE INT_AGE.AGE_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
AGE_THE.AGE_CODE, AGE_THE.THE_CODE, AGE_THE.CREATED_AT,
AGE_THE.CREATED_BY, AGE_THE.UPDATED_AT, AGE_THE.UPDATED_BY FROM
AGE_THE WHERE AGE_THE.AGE_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
INT_AGE.INT_CODE, INT_AGE.AGE_CODE, INT_AGE.CREATED_AT,
INT_AGE.CREATED_BY, INT_AGE.UPDATED_AT, INT_AGE.UPDATED_BY FROM
INT_AGE WHERE INT_AGE.AGE_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
AGE_THE.AGE_CODE, AGE_THE.THE_CODE, AGE_THE.CREATED_AT,
AGE_THE.CREATED_BY, AGE_THE.UPDATED_AT, AGE_THE.UPDATED_BY FROM
AGE_THE WHERE AGE_THE.AGE_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
OFFRE_PRIX.OFF_CODE, OFFRE_PRIX.OFF_OFF_CODE, OFFRE_PRIX.ROF_CODE,
OFFRE_PRIX.CHA_CODE, OFFRE_PRIX.TOF_CODE, OFFRE_PRIX.AOF_CODE,
OFFRE_PRIX.COL_CODE, OFFRE_PRIX.MOF_CODE, OFFRE_PRIX.MEO_CODE,
OFFRE_PRIX.ICH_CODE, OFFRE_PRIX.NOF_CODE, OFFRE_PRIX.OFF_LIB,
OFFRE_PRIX.OFF_REFCLI, OFFRE_PRIX.OFF_DATCOM, OFFRE_PRIX.OFF_DATLIV,
OFFRE_PRIX.OFF_DATVALID, OFFRE_PRIX.OFF_CMT, OFFRE_PRIX.OFF_CMTCLI,
OFFRE_PRIX.OFF_INDFNR, OFFRE_PRIX.OFF_APPADV, OFFRE_PRIX.OFF_SAISIADV,
OFFRE_PRIX.OFF_EXECUTION, OFFRE_PRIX.CREATED_AT,
OFFRE_PRIX.CREATED_BY, OFFRE_PRIX.UPDATED_AT, OFFRE_PRIX.UPDATED_BY,
OFFRE_PRIX.OFF_EXTERNE FROM OFFRE_PRIX WHERE OFFRE_PRIX.OFF_OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
OFF_SCH.SCH_CODE, OFF_SCH.OFF_CODE, OFF_SCH.AOS_ENCOURS,
OFF_SCH.CREATED_AT, OFF_SCH.CREATED_BY, OFF_SCH.UPDATED_AT,
OFF_SCH.UPDATED_BY FROM OFF_SCH WHERE OFF_SCH.OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
OFF_UTI.OFF_CODE, OFF_UTI.UTI_CODE, OFF_UTI.AOU_VISIBILITE,
OFF_UTI.AOU_MODIF, OFF_UTI.AOU_SIGNAT, OFF_UTI.CREATED_AT,
OFF_UTI.CREATED_BY, OFF_UTI.UPDATED_AT, OFF_UTI.UPDATED_BY FROM
OFF_UTI WHERE OFF_UTI.OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
LIGNE_OFFRE.OFF_CODE, LIGNE_OFFRE.LOF_CODE, LIGNE_OFFRE.TLO_CODE,
LIGNE_OFFRE.COL_CODE, LIGNE_OFFRE.TLC_CODE, LIGNE_OFFRE.LOF_AFF,
LIGNE_OFFRE.ART_CODE, LIGNE_OFFRE.EMC_CODE, LIGNE_OFFRE.MOC_NOORDRE,
LIGNE_OFFRE.RGT_CODE, LIGNE_OFFRE.TRF_NUM, LIGNE_OFFRE.LOF_LIB,
LIGNE_OFFRE.LOF_REM1, LIGNE_OFFRE.LOF_REM2, LIGNE_OFFRE.LOF_REM3,
LIGNE_OFFRE.LOF_PRXTAR, LIGNE_OFFRE.LOF_PRXNETDIS,
LIGNE_OFFRE.LOF_PRXCALCDIS, LIGNE_OFFRE.LOF_MARGEDIS,
LIGNE_OFFRE.LOF_PRXNETINS, LIGNE_OFFRE.LOF_REMINS,
LIGNE_OFFRE.LOF_PRXCALCINS, LIGNE_OFFRE.LOF_DESIG,
LIGNE_OFFRE.LOF_CMT, LIGNE_OFFRE.LOF_QTE, LIGNE_OFFRE.CREATED_AT,
LIGNE_OFFRE.CREATED_BY, LIGNE_OFFRE.UPDATED_AT,
LIGNE_OFFRE.UPDATED_BY, LIGNE_OFFRE.LOF_OPTION FROM LIGNE_OFFRE WHERE
LIGNE_OFFRE.OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
TDO_TOF_CTC.TTC_CODE, TDO_TOF_CTC.OFF_CODE, TDO_TOF_CTC.TDO_CODE,
TDO_TOF_CTC.CTC_CODE, TDO_TOF_CTC.INT_CODE, TDO_TOF_CTC.CREATED_AT,
TDO_TOF_CTC.CREATED_BY, TDO_TOF_CTC.UPDATED_AT, TDO_TOF_CTC.UPDATED_BY
FROM TDO_TOF_CTC WHERE TDO_TOF_CTC.OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
DEV_DEROG.OFF_CODE, DEV_DEROG.OFF_OFF_CODE, DEV_DEROG.CREATED_AT,
DEV_DEROG.CREATED_BY, DEV_DEROG.UPDATED_AT, DEV_DEROG.UPDATED_BY FROM
DEV_DEROG WHERE DEV_DEROG.OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
DEV_DEROG.OFF_CODE, DEV_DEROG.OFF_OFF_CODE, DEV_DEROG.CREATED_AT,
DEV_DEROG.CREATED_BY, DEV_DEROG.UPDATED_AT, DEV_DEROG.UPDATED_BY FROM
DEV_DEROG WHERE DEV_DEROG.OFF_OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): SELECT
HISTO_ENV_OFF.HEO_CODE, HISTO_ENV_OFF.OFF_CODE,
HISTO_ENV_OFF.MEO_CODE, HISTO_ENV_OFF.UTI_CODE,
HISTO_ENV_OFF.CTC_CODE, HISTO_ENV_OFF.HEO_SUJET,
HISTO_ENV_OFF.HEO_MESSAGE, HISTO_ENV_OFF.CREATED_AT,
HISTO_ENV_OFF.CREATED_BY, HISTO_ENV_OFF.UPDATED_AT,
HISTO_ENV_OFF.UPDATED_BY FROM HISTO_ENV_OFF WHERE
HISTO_ENV_OFF.OFF_CODE=?
Aug 18 11:29:13 symfony [info] {sfCreole} beginning transaction.
Aug 18 11:29:13 symfony [info] {sfCreole} beginning transaction.
Aug 18 11:29:13 symfony [info] {sfCreole} prepareStatement(): INSERT
INTO OFFRE_PRIX (CREATED_AT,UPDATED_AT,OFF_CODE) VALUES (?,?,?)
Aug 18 11:29:13 symfony [info] {sfCreole} rolling back transaction.
Aug 18 11:29:13 symfony [info] {sfCreole} rolling back transaction.
Aug 18 11:29:13 symfony [err] {sfException} Unable to execute INSERT
statement. [wrapped: Unable to execute update [Native Error: : ] [User
Info: INSERT INTO OFFRE_PRIX (CREATED_AT,UPDATED_AT,OFF_CODE) VALUES
(:var1,:var2,:var3)]] in /home/david/Public/symfony-1.0.17/lib/vendor/
propel/util/BasePeer.php line 308

Mon code dans mon fichier actions.class.php :

[...]
  protected function duplicationOffreDePrix ($idOffreInitiale = NULL,
$contexte)
  {
    if (NULL == $idOffreInitiale)
    {
      $this->logMessage('Identifiant offre initiale : ' .
$idOffreInitiale);
      return false;
    }
    // 1 - récupérer l'offre de prix actuelle
    $offrePrixInitiale =
OffrePrixPeer::retrieveByPK($idOffreInitiale);
    // 2 - la dupliquer
    $nouvelleOffrePrix =  new OffrePrix();
    $offrePrixInitiale->copyInto($nouvelleOffrePrix, 1);
    $nouvelleOffrePrix->save();
[...]

Symfony version :

$ ./symfony --version
symfony version 1.0.17


Apache log :

[Mon Aug 18 11:35:56 2008] [error] [client 127.0.0.1] PHP Warning:
oci_execute() [<a href='function.oci-execute'>function.oci-execute</
a>]: ORA-01400: cannot insert NULL into
('XXX'.'OFFRE_PRIX'.'TOF_CODE') in /home/david/Public/symfony-1.0.17/
lib/vendor/creole/drivers/oracle/OCI8PreparedStatement.php on line
155, referer: 
http://localhost/---/---/web/frontend_xxx_dev.php/offreprix/fiche/off_code/3
[Mon Aug 18 11:35:56 2008] [error] [client 127.0.0.1] PHP Warning:
oci_error() expects parameter 1 to be resource, array given in /
home/---/Public/symfony-1.0.17/lib/vendor/creole/drivers/oracle/
OCI8Connection.php on line 334, referer:
http://localhost/---/---/web/frontend_xxx_dev.php/offreprix/fiche/off_code/3

Un extrait du schema.yml :

  OFFRE_PRIX:
    OFF_CODE:
      type: NUMERIC
      size: 22
      primaryKey: true
      autoIncrement: true
      sequence: OFFRE_PRIX_SEQ
    [...]
    TOF_CODE:
      type: NUMERIC
      size: 22
      foreignTable: TYPE_OFF
      foreignReference: TOF_CODE
      onDelete:
      onUpdate:
    [...]
  TYPE_OFF:
    _attributes:
      isI18N: true
      i18nTable: TYPE_OFF_I18N
    TOF_CODE:
      type: NUMERIC
      size: 22
      primaryKey: true
      autoIncrement: true
      sequence: TYPE_OFF_SEQ
    CREATED_AT:
      type: TIMESTAMP
    CREATED_BY:
      type: NUMERIC
      size: 22
    UPDATED_AT:
      type: TIMESTAMP
    UPDATED_BY:
      type: NUMERIC
      size: 22
  [...]

Je reste à votre disposition pour toute demande complémentaire.

Merci,
David « willou ».
--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "Symfony-fr" 
de Google Groupes.
 Pour transmettre des messages à ce groupe, envoyez un e-mail à 
l'adresse [email protected]
 Pour résilier votre abonnement à ce groupe, envoyez un e-mail à 
l'adresse [EMAIL PROTECTED]
 Pour afficher d'autres options, visitez ce groupe à l'adresse 
http://groups.google.com/group/symfony-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---

Répondre à