Doctrine 1
  1. Doctrine 1
  2. DC-313

Ordering m2m relationship with column from related table (with orderBy option)

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Blocker Blocker
    • Resolution: Unresolved
    • Affects Version/s: 1.2.0
    • Fix Version/s: None
    • Component/s: Record, Relations
    • Labels:
      None
    • Environment:
      php 5.3/win, doctrine 1.2 svn, ATTR_QUOTE_IDENTIFIER = true, ATTR_USE_DQL_CALLBACKS = true

      Description

      I find no way to define automatic orderBy in m2m relations with column not from reference table, but actual related table.

      E.g. BlogPost <= m2m through BlogPostCategory => BlogCategory
      I need BlogPost->Categories ordered by BlogCategory.name

      class BlogPost extends Doctrine_Record
      {
          public function setTableDefinition()
          {
              $this->hasColumn('title', 'string', 128);
              $this->hasColumn('content', 'string');
          }
          
          public function setUp()
          {
              $this->hasMany('BlogCategory as BlogCategories', array('local' => 'id_blog_post', 'foreign' => 'id_blog_category', 'refClass' => 'BlogPostCategory', 'orderBy' => 'name'));        
          }
      }
      
      class BlogCategory extends Doctrine_Record
      {
          public function setTableDefinition()
          {
              $this->hasColumn('name', 'string', 128);
          }
          
          public function setUp()
          {
              $this->hasMany('BlogPost as BlogPosts', array('local' => 'id_blog_category', 'foreign' => 'id_blog_post', 'refClass' => 'BlogPostCategory'));
          }
      }
      
      class BlogPostCategory extends Doctrine_Record
      {
          public function setTableDefinition()
          {
              $this->hasColumn('id_blog_post', 'integer', null, array('primary' => true));
              $this->hasColumn('id_blog_category', 'integer', null, array('primary' => true));
          }
          
          public function setUp()
          {
              $this->hasOne('BlogPost', array('local' => 'id_blog_post', 'foreign' => 'id', 'onDelete' => 'CASCADE'));
              $this->hasOne('BlogCategory', array('local' => 'id_blog_category', 'foreign' => 'id', 'onDelete' => 'CASCADE'));
          }
      }
      

      The resulting query contains doubled 'name' column in ORDER BY clause, both from reference table and related table, e.g. ORDER BY t2.name, t3.name

      I tried putting the following code in BlogCategory::setTableDefinition() instead of attribute in relation definition in BlogPost record:

      $this->option('orderBy', 'name');
      

      but the result was the same.

      Maybe I'm doing something wrong? Is there a possibility to define an alias, where to get column name from - in orderBy attribute?

      Thanks in advance.

        Activity

        Maciej Hołyszko created issue -
        Maciej Hołyszko made changes -
        Field Original Value New Value
        Attachment DC313TestCase.php [ 10202 ]
        Maciej Hołyszko made changes -
        Priority Major [ 3 ] Blocker [ 1 ]

          People

          • Assignee:
            Jonathan H. Wage
            Reporter:
            Maciej Hołyszko
          • Votes:
            3 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated: