Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-2221

In YAML, joinColumn names are ignored in One to Many and Many To One relationships

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Invalid
    • Affects Version/s: 2.3.1
    • Fix Version/s: None
    • Component/s: ORM
    • Security Level: All
    • Labels:
      None

      Description

      When using YAML configuration to define 1:M, M:1 relationships, the joinColumn.name entry is ignored and Doctrine tries to use the default *_id convention.

      Using the Doctrine2 tutorial example, I created YAML mapping for the Bug entity:

      1. config/yaml/Bug.dcm.yml
        Bug:
        type: entity
        table: bugs
        id:
        id:
        type: integer
        generator:
        strategy: AUTO
        fields:
        description:
        type: text
        created:
        type: datetime
        status:
        type: string
        manyToOne:
        reporter:
        targetEntity: User
        inversedBy: reportedBugs
        joinColumm:
        name: reporterId
        referencedColumnName: id
        engineer:
        targetEntity: User
        inversedBy: assignedBugs
        joinColumm:
        name: engineerId
        referencedColumnName: id
        manyToMany:
        products:
        targetEntity: Product

      I then tried to run list_bugs:

      <?php
      // list_bugs.php
      require_once "bootstrap.php";

      $dql = "SELECT b, e, r FROM Bug b JOIN b.engineer e JOIN b.reporter r ORDER BY b.created DESC";

      $query = $em->createQuery($dql);
      $query->setMaxResults(30);
      $bugs = $query->getResult();

      foreach($bugs AS $bug) {
      echo $bug->getDescription()." - ".$bug->getCreated()->format('d.m.Y')."\n";
      echo " Reported by: ".$bug->getReporter()->name."\n";
      echo " Assigned to: ".$bug->getEngineer()->name."\n";
      foreach($bug->getProducts() AS $product)

      { echo " Platform: ".$product->getName()."\n"; }

      echo "\n";

      However, I get this error message:

      PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'b0_.reporter_id' in 'field list'' in /Library/WebServer/Documents/DoctrineTutorial/Doctrine/DBAL/Connection.php:646
      Stack trace:
      #0 /Library/WebServer/Documents/DoctrineTutorial/Doctrine/DBAL/Connection.php(646): PDO->query('SELECT b0_.id A...')
      #1 /Library/WebServer/Documents/DoctrineTutorial/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php(46): Doctrine\DBAL\Connection->executeQuery('SELECT b0_.id A...', Array, Array, NULL)
      #2 /Library/WebServer/Documents/DoctrineTutorial/Doctrine/ORM/Query.php(264): Doctrine\ORM\Query\Exec\SingleSelectExecutor->execute(Object(Doctrine\DBAL\Connection), Array, Array)
      #3 /Library/WebServer/Documents/DoctrineTutorial/Doctrine/ORM/AbstractQuery.php(737): Doctrine\ORM\Query->_doExecute()

        Activity

          People

          • Assignee:
            Marco Pivetta
            Reporter:
            Shu Chow
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: