如何获得相关对象Propel ORM

时间:2011-03-27 00:18:24

标签: php oop zend-framework orm propel

使用Zend Framework处理项目时,我正在使用带有许多相关数据库对象的Propel ORM。我是两个新手,但我创建了对象模型并且正在工作。我现在正试图让我的头围绕物体进入。

我有一个创建新用户的方法,它的工作正常并更新相关的行(并非每个相关的,但它是一个开始)。现在我想向系统用户(用户创建者)提供“新”用户数据。我得到了用户名,我现在想要在其他一些属性中获得'UserLevel'。

用户创建后,我调用我的findUserByUserName方法,传递新用户的用户名,我在Users表中返回所有内容,但我还需要'AgenciesAndUsers'表中与该新用户相关的属性。

这就是我正在尝试的,但它看起来似乎有效,而且它看起来似乎不对......我应该能够通过'用户 - >'进入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();

编辑:我刚刚意识到(在查看我发布的问题之后),我可能会将所有这些“用户”属性“链接”到网上,而不是一遍又一遍地重复“$ User”。

直接从Propel手册中看出来的直接......我已经阅读了很多部分的BTW,只是作为初学者/新手有'启动'问题。

1 个答案:

答案 0 :(得分:1)

如果您的关系设置正确,则应该有对象的访问者:

$user->getAgenciesAndUsers();

没有理由分别查询AgenciesAndUsers。实际上,如果在查询中使用JOIN,则只需要按一次DB。

此外,如果你没有走到这一步,我会重命名它是奇异的,即。 AgencyAndUser(或更正确的UserAgency)和User