Ошибка пропущенного аргумента Symfony PHP при использовании Join - PullRequest
1 голос
/ 22 июля 2011

Привет! Я использую проект PHP Symfony и пытаюсь использовать сгенерированный класс peer-класса для выполнения запроса.

Модель сгенерировала метод "doSelectJoinMeetingItems", который должен присоединить мою таблицу действий собрания к моей таблице элементов собрания (см. Цитату сгенерированного кода ниже).

Однако при использовании этого метода я получаю следующую ошибку: Warning: Missing argument 1 for sfComponent::__construct(), - см. Полностью ниже.

Кто-нибудь знает, почему это происходит? Все, что я делаю, это использую собственные сгенерированные методы Symfonys, чтобы попытаться передать мне данные через мой ORM!

Спасибо за ваше время,

Мой код:

Inside MeetingMeetingsPeer

return self::doSelectJoinMeetingItems(new Criteria());

Автоматически сгенерированный baseMeetingActionsPeer

public static function doSelectJoinMeetingItems(Criteria $criteria, $con = null, $join_behavior = Criteria::LEFT_JOIN)
{
    $criteria = clone $criteria;

    // Set the correct dbName if it has not been overridden
    if ($criteria->getDbName() == Propel::getDefaultDB()) {
        $criteria->setDbName(self::DATABASE_NAME);
    }

    MeetingActionsPeer::addSelectColumns($criteria);
    $startcol = (MeetingActionsPeer::NUM_COLUMNS - MeetingActionsPeer::NUM_LAZY_LOAD_COLUMNS);
    MeetingItemsPeer::addSelectColumns($criteria);

    $criteria->addJoin(MeetingActionsPeer::ITEM_ID, MeetingItemsPeer::ID, $join_behavior);

    // symfony_behaviors behavior
    foreach (sfMixer::getCallables(self::getMixerPreSelectHook(__FUNCTION__)) as $sf_hook)
    {
      call_user_func($sf_hook, 'BaseMeetingActionsPeer', $criteria, $con);
    }

    $stmt = BasePeer::doSelect($criteria, $con);
    $results = array();

    while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
        $key1 = MeetingActionsPeer::getPrimaryKeyHashFromRow($row, 0);
        if (null !== ($obj1 = MeetingActionsPeer::getInstanceFromPool($key1))) {
            // We no longer rehydrate the object, since this can cause data loss.
            // See http://propel.phpdb.org/trac/ticket/509
            // $obj1->hydrate($row, 0, true); // rehydrate
        } else {

            $cls = MeetingActionsPeer::getOMClass(false);

            $obj1 = new $cls();
            $obj1->hydrate($row);
            MeetingActionsPeer::addInstanceToPool($obj1, $key1);
        } // if $obj1 already loaded

        $key2 = MeetingItemsPeer::getPrimaryKeyHashFromRow($row, $startcol);
        if ($key2 !== null) {
            $obj2 = MeetingItemsPeer::getInstanceFromPool($key2);
            if (!$obj2) {

                $cls = MeetingItemsPeer::getOMClass(false);

                $obj2 = new $cls();
                $obj2->hydrate($row, $startcol);
                MeetingItemsPeer::addInstanceToPool($obj2, $key2);
            } // if obj2 already loaded

            // Add the $obj1 (MeetingActions) to $obj2 (MeetingItems)
            $obj2->addMeetingActions($obj1);

        } // if joined row was not null

        $results[] = $obj1;
    }
    $stmt->closeCursor();
    return $results;
}

Ошибка в полном объеме

Warning: Missing argument 1 for sfComponent::__construct(), called in /var/www/html/dev/meeting/lib/model/om/BaseMeetingActionsPeer.php on line 584 and defined in /var/www/html/dev/meeting/lib/vendor/symfony/lib/action/sfComponent.class.php on line 36

Warning: Missing argument 2 for sfComponent::__construct(), called in /var/www/html/dev/meeting/lib/model/om/BaseMeetingActionsPeer.php on line 584 and defined in /var/www/html/dev/meeting/lib/vendor/symfony/lib/action/sfComponent.class.php on line 36

Warning: Missing argument 3 for sfComponent::__construct(), called in /var/www/html/dev/meeting/lib/model/om/BaseMeetingActionsPeer.php on line 584 and defined in /var/www/html/dev/meeting/lib/vendor/symfony/lib/action/sfComponent.class.php on line 36

Notice: Undefined variable: context in /var/www/html/dev/meeting/lib/vendor/symfony/lib/action/sfComponent.class.php on line 38

Fatal error: Call to a member function getEventDispatcher() on a non-object in /var/www/html/dev/meeting/lib/vendor/symfony/lib/action/sfComponent.class.php on line 55

Строки с 582 по 586 следующие:

582    $cls = MeetingActionsPeer::getOMClass(false);
583    
584    $obj1 = new $cls();
585    $obj1->hydrate($row);
586    MeetingActionsPeer::addInstanceToPool($obj1, $key1);

Строка 36 из sfComponnent.class.php

36    public function __construct($context, $moduleName, $actionName)
37      {
38        $this->initialize($context, $moduleName, $actionName);
39      }

1 Ответ

1 голос
/ 08 августа 2011

Я обнаружил проблему, в Symfony 1.4 у вас не может быть класса, заканчивающегося actions , например, UserActions или GroupActions (если это где-то было должным образом задокументировано).

Я хочу этобыло лучше задокументировано, а ошибка была более полезной!

имя класса (в schema.yml), которое заканчивается на «% Actions», например, UserActions?(Symfony 1.4.10).Произошла ошибка, когда я добавил дополнительное поле (с проверкой) в виде объекта, связанного с этим «* Действиями».

wrapped: Warning: Missing argument 2 for sfComponent::__construct(), called in 
/Users/Shared/Library/symfony-1.4.10/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Table.php 
on line 301 and defined in /Users/Shared/Library/symfony-1.4.10/lib/action/sfComponent.class.php on line 36 
Warning: Missing argument 3 for sfComponent::__construct(), called in 
/Users/Shared/Library/symfony-1.4.10/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Table.php 
on line 301 and defined in /Users/Shared/Library/symfony-1.4.10/lib/action/sfComponent.class.php on line 36]

См. Сообщение в http://trac.symfony -project.org/wiki/ReservedWords

...