Symfony fixtures: Array to string conversion oraz Integrity constraint violation

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.

Notice: Array to string conversion in /lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php on line 252