W przypadku, gdy podczas ładowania fixtures w projekcie symfony pojawi się jeden z poniższych komunikatów:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'Array’ for key ’email_address’
Notice: Array to string conversion in /lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php on line 252
warto sprawdzić same fixtures i upewnić się, że nie ładujemy ich kilkukrotnie. Błąd może być spowodowany właśnie tym faktem, iż fixtures są składane w całość podczas ich ładowania. W przypadku, jeżeli będziemy mieli kilka obiektów o tym samym indeksie:
sfGuardUser:
admin:
username: admin
password: admin
email_address: admin@admin.pl
Groups: [adminGroup]
sfGuardUser:
admin:
username: admin
password: admin
email_address: admin@admin.pl
Groups: [adminGroup]
Doctrine spróbuje połączyć obiekt admin w jeden. W przypadku pól typu username, spróbuje ona stworzyć z nich tablicę. Efekt: podczas ładowania nastąpi próba przemapowania ich na string. W efekcie uzyskamy komunikat:
Notice: Array to string conversion
A wszystkie pola otrzymają wartość: Array – co jest powodem Integrity constraint violation.
Przy okazji: warto sprawdzić, czy przypadkiem nie ładujemy tego samego pluginu kilkukrotnie. W tym celu opłaca sięsprawdzić plik config/ProjectConfiguration.class.php i metodę setup():
class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
$this->enablePlugins(array(
'sfDoctrinePlugin',
'sfDoctrineGuardPlugin',
'sfDoctrineGuardPlugin',
));
}
}
Eksperymenty z instalowaniem pluginów mogą spowodować, że plik będzie wyglądał właśnie w ten sposób. Symfony po wydaniu komendy ./symfony doctrine:build –all –and-load załaduje fixtures.yml dwukrotnie, co spowodouje wystąpienie błędu.