Witam,
wygenerowałem domyślnego CRUD'a dla tabeli użytkownika. W tabeli znajduje się również id użytkownika który polecił serwis(idpolecajacy).
zmieniłem __toString, user'a, i ładnie wyświetla wszystkich użytkowników w domyślnym formularzu. Początkowo w schema.yml nie ustawiłem notnull (dla pola idpolecajacy), i każda próba stworzenia nowego user'a kończyła się powodzeniem z małym ALE, w idpolecajacy wstawiany był NULL. Jeżeli użytkownik był edytowany, wszystkie dane można było zmienić, poza idpolecajacy. potem ustawiłem not null (jak w poniższym listingu), od tej pory symfony zaczął sypać błędem:
500 | Internal Server Error | Doctrine_Connection_Mysql_Exception
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'idpolecajacy' cannot be null
stack trace
at ()
in SF_SYMFONY_LIB_DIR\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connect
ion.php line 1082 ...
$message .= sprintf('. Failing Query: "%s"', $query);
}
$exc = new $name($message, (int) $e->getCode());
$e->errorInfo = array(null, null, null, null);
}
at Doctrine_Connection->rethrowException(object('PDOException'), object('Doctrine_Connection_Statement'))
in SF_SYMFONY_LIB_DIR\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connect
ion\Statement.php line 269 ...
at Doctrine_Connection_Statement
->execute(array('zdzichu', 'zdzichu@mail.mail', 'tajnehaslo', null))in SF_SYMFONY_LIB_DIR\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connect
ion.php line 1042 ...
at Doctrine_Connection
->exec('INSERT INTO user (nick, email, haslo, idpolecajacy) VALUES (?, ?, ?, ?)', array('zdzichu', 'zdzichu@mail.mail', 'tajnehaslo', null))in SF_SYMFONY_LIB_DIR\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connect
ion.php line 687 ...
at Doctrine_Connection
->insert(object
('userTable'), array('nick' => 'zdzichu', 'email' => 'zdzichu@mail.mail', 'haslo' => 'tajnehaslo', 'idpolecajacy' => null))in SF_SYMFONY_LIB_DIR\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connect
ion\UnitOfWork.php line 647 ...
at Doctrine_Connection_UnitOfWork->processSingleInsert(object('user'))
in SF_SYMFONY_LIB_DIR\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connect
ion\UnitOfWork.php line 571 ...
at Doctrine_Connection_UnitOfWork->insert(object('user'))
in SF_SYMFONY_LIB_DIR\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connect
ion\UnitOfWork.php line 81 ...
at Doctrine_Connection_UnitOfWork->saveGraph(object('user'))
in SF_SYMFONY_LIB_DIR\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Record.php line 1718 ...
at Doctrine_Record->save(object('Doctrine_Connection_Mysql'))
in SF_SYMFONY_LIB_DIR\form\addon\sfFormObject.class.php line 161 ...
at sfFormObject->doSave(object('Doctrine_Connection_Mysql'))
in SF_SYMFONY_LIB_DIR\form\addon\sfFormObject.class.php line 130 ...
at sfFormObject->save()
in SF_ROOT_DIR\apps\frontend\modules\user\actions\actions.class.php line 74 ...
at userActions->processForm(object('sfWebRequest'), object('userForm'))
in SF_ROOT_DIR\apps\frontend\modules\user\actions\actions.class.php line 37 ...
at userActions->executeCreate(object('sfWebRequest'))
in SF_SYMFONY_LIB_DIR\action\sfActions.class.php line 60 ...
at sfActions->execute(object('sfWebRequest'))
in SF_SYMFONY_LIB_DIR\filter\sfExecutionFilter.class.php line 92 ...
at sfExecutionFilter->executeAction(object('userActions'))
in SF_SYMFONY_LIB_DIR\filter\sfExecutionFilter.class.php line 78 ...
at sfExecutionFilter->handleAction(object('sfFilterChain'), object('userActions'))
in SF_SYMFONY_LIB_DIR\filter\sfExecutionFilter.class.php line 42 ...
at sfExecutionFilter->execute(object('sfFilterChain'))
in SF_SYMFONY_LIB_DIR\filter\sfFilterChain.class.php line 53 ...
at sfFilterChain->execute()
in SF_SYMFONY_LIB_DIR\filter\sfRenderingFilter.class.php line 33 ...
at sfRenderingFilter->execute(object('sfFilterChain'))
in SF_SYMFONY_LIB_DIR\filter\sfFilterChain.class.php line 53 ...
at sfFilterChain->execute()
in SF_SYMFONY_LIB_DIR\controller\sfController.class.php line 238 ...
at sfController->forward('user', 'create')
in SF_SYMFONY_LIB_DIR\controller\sfFrontWebController.class.php line 48 ...
at sfFrontWebController->dispatch()
in SF_SYMFONY_LIB_DIR\util\sfContext.class.php line 170 ...
at sfContext->dispatch()
in SF_ROOT_DIR\web\frontend_dev.php line 13 ...
schema.yml wygląda następująco:
---
detect_relations: true
options:
collate: utf8_polish_ci
charset: utf8
type: InnoDB
user:
columns:
iduser:
type: integer(4)
primary: true
notnull: true
autoincrement: true
nick:
type: string(45)
notnull: true
email:
type: string(256)
notnull: true
haslo:
type: string(128)
notnull: true
idpolecajacy:
type: integer(4)
notnull: true
relations:
idpolecajacy:
class: user
local: idpolecajacy
foreign: iduser
foreignAlias: users
indexes:
fk_user_user1:
fields: [idpolecajacy]
formularz był poprawnie generowany i każdy idpolecajacy w comboboxie miał odpowiednią wartość oraz etykietę,
tablica POST też przyjmowała odpowiednią wartość dla tego pola.
jestem początkującym w tym frameworku, a tu takie schody :]
wersja symfony: 1.4.13
bardzo proszę o pomoc/sugestie, może zapomniałem o czymś? tego typu CRUD powinien chyba działać od razu po zmianie funkcji __tostring?
ps.
symfony generuje takiego inserta:
INSERT INTO user (nick, email, haslo, idpolecajacy) VALUES (?, ?, ?, ?) - (zdzichu, zdzichu@mail.mail, tajnehaslo, )
zupełnia pomija idpolecajacy, dlaczego ta wartość się gubi?
Ten post edytował zniviash 13.09.2011, 08:31:43