Как получить связанный объект Propel ORM - PullRequest
0 голосов
/ 27 марта 2011

Работая над проектом с Zend Framework, я использую Propel ORM со многими связанными объектами базы данных.Я новичок в обоих, но у меня есть объектные модели, созданные и работающие.Сейчас я просто пытаюсь разобраться с доступом к объектам.

У меня есть метод для создания нового пользователя, его работы и обновления связанных строк (Не все связанные, но это начало).Теперь я хочу представить «Новые» пользовательские данные системному пользователю (создателю пользователя).Я вернул имя пользователя и теперь хочу получить UserLevel среди нескольких других свойств.

После создания пользователя я вызываю свой метод findUserByUserName, передавая имя пользователя нового пользователя, я получаю обратно все в таблицу Users, но мне также нужны свойства из таблицы 'AgenciesAndUsers', которые связаны с этим новым пользователем.

Это то, что я пытаюсь, но оно «не работает», кажется, работает, к тому же оно не кажется правильным в любом случае ... Я должен быть в состоянии передать «Users->» в AgenciesAndUsers, чтобы получить связанныесвойства для этого пользователя:

         $User = UsersQuery::create()->findOneByUserName($UserName);
         $UserId = $User->getUserId();

         $UserData = AgenciesAndUsersQuery::create()->findOneByUserId($UserId);

         $data = // merge the two objects

         return $data;

Здесь я остановился, потому что понял, что если это работает, мне нужно передать два объекта обратно в мой контроллер (или как бы он ни вызывал мой метод).Подожди ... Я знаю, что есть ... так "Как мне" получить доступ к свойствам из связанного объекта?Я знаю, что это половина ... или, может быть, целая ... причина для использования системы ORM в любом случае:)

Я пытался отменить то, что сделал при создании своего пользователя, но я просто не могу этого сделатьЭто.Кроме того, может быть лучше просто передать данные нового пользователя после создания нового пользователя в этом методе, разве у меня нет постоянного объекта после создания нового пользователя?Но мне все равно понадобится метод 'findUserByUserName' среди многих других.

Вот как я создаю своего нового пользователя и его данные AgencyAndUser тоже ...

$user = new Users();
        $user->setActive($Active);
        $user->setCreatedAt($CreatedAt);
        $user->setEmailAddress($EmailAddress);
        $user->setEnabledInForms($EnabledInForms);
        $user->setFirstName($FirstName);
        $user->setInitialPassword($InitialPassword);
        $user->setLastName($LastName);
        $user->setModifiedAt($ModifiedAt);      
        $user->setPassword($UserPassword);
        $user->setPhoneNumber($PhoneNumber);
        $user->setTitle($Title);
        $user->setUserName($UserName);
        $user->setUserPasswordActive($UserPasswordActive);  

        $user->save();

        $AgnecyAndUser = new AgenciesAndUsers();
        $AgnecyAndUser->setAgencyId($AgencyId);
        $AgnecyAndUser->setUserLevel($UserLevel);

        // associate the $Users object with the current $AgnecyAndUser
        $AgnecyAndUser->setUsers($user);
        $AgnecyAndUser->save();

Редактировать: Iтолько что понял (посмотрев на мой опубликованный вопрос), что я мог бы, вероятно, «связать» все эти свойства «пользователя» в режиме онлайн вместо того, чтобы повторять «$ User» снова и снова.

Получилось чисто, прямоиз Руководства Propel ... который, кстати, я прочитал также во многих разделах, просто с проблемами при запуске как новичок / новичок.

1 Ответ

1 голос
/ 27 марта 2011

Если ваши отношения настроены правильно, для объекта должны быть средства доступа:

$user->getAgenciesAndUsers();

Не должно быть причины запрашивать AgenciesAndUsers отдельно.Фактически, если вы используете JOIN в своем запросе, вам нужно всего лишь один раз нажать на БД.

Также, если вы не пошли слишком далеко с этим, я бы переименовал все в единственное число, т.е.AgencyAndUser (или более правильно UserAgency) и User.

...