Doctrine 1
  1. Doctrine 1
  2. DC-371

Lazy loading - doctrine makes extra queries into db


    • Type: Bug Bug
    • Status: Open
    • Priority: Critical Critical
    • Resolution: Unresolved
    • Affects Version/s: 1.2.0-BETA3
    • Fix Version/s: None
    • Labels:
    • Environment:
      Symfony 1.4, Doctrine Version: 1.2.0-BETA3


      Just downloaded symfony 1.4

      First of all I have a query:

      $q = \Doctrine_Query::create()
      ->select('u., ur.')
      ->from('UserDb u')
      ->leftJoin('u.RealUserDetailsDb ur')
      ->leftJoin('u.MockUserDetailsDb um')
      ->where(' = :user_id')
      $user = $q->fetchOne(array(':user_id' => $uid));

      After that I'm accessing the fields of this object:

      $userArray = array(
      'id' => $this->getUser()->getId(),
      'real_user_details_id' => $this->getUser()->getRealUserDetailsId(),
      'mock_user_details_id' => $this->getUser()->getMockUserDetailsId(),
      'real_user_details' => array(),
      'mock_user_details' => array()

      This is the actual queries into DB:

      SELECT AS u_id, u.user_real_id AS uuser_real_id, u.user_mock_id AS uuser_mock_id, AS u2id, u2.nickname AS u2nickname, AS u2_email FROM user u LEFT JOIN user_real u2 ON u.user_real_id = LEFT JOIN user_mock u3 ON u.user_mock_id = WHERE ( = :user_id)

      SELECT AS u_id, u.user_real_id AS uuser_real_id, u.user_mock_id AS u_user_mock_id FROM user u WHERE ( = '1') LIMIT 1

      As you can see there are TWO queries however there should be only one query. The problem is that u.user_real_id is NULL in database and when I do 'real_user_details_id' => $this->getUser()->getRealUserDetailsId() doctrine does not have enough intelligence to understand that these fields have been already requested in NR1. If I comment this field, everything works well.

      And now a surprise... if I modify a little bit my first query: ">select('u.')" instead of , ">select('u., ur.*')" it WON'T make TWO queries. It will make ONLY ONE!

      As you understand this a very critical bug and of course our system won't go to production with this bug.

      P.S. Is it possible to turn off the lazy loading in doctrine?


        Roman Drapeko created issue -


          • Assignee:
            Jonathan H. Wage
            Roman Drapeko
          • Votes:
            0 Vote for this issue
            1 Start watching this issue


            • Created: