Php 如何获取相关对象

Php 如何获取相关对象,php,oop,zend-framework,orm,propel,Php,Oop,Zend Framework,Orm,Propel,在一个使用Zend框架的项目中,我正在将Propel ORM与许多相关的数据库对象一起使用。我对两者都不熟悉,但我已经创建了对象模型并开始工作。我现在只是想了解一下对象访问 我有一个创建新用户的方法,它工作正常并更新相关行(不是每个相关行,但这只是一个开始)。现在我想将“新”用户数据呈现给系统用户(user creater)。我得到了用户名,现在我想得到一些其他属性中的“UserLevel” 创建用户后,我调用findUserByUserName方法,传递新用户的用户名,返回Users表中的所有

在一个使用Zend框架的项目中,我正在将Propel ORM与许多相关的数据库对象一起使用。我对两者都不熟悉,但我已经创建了对象模型并开始工作。我现在只是想了解一下对象访问

我有一个创建新用户的方法,它工作正常并更新相关行(不是每个相关行,但这只是一个开始)。现在我想将“新”用户数据呈现给系统用户(user creater)。我得到了用户名,现在我想得到一些其他属性中的“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();
编辑:我刚刚意识到(在看了我发布的问题之后),我可能可以将所有这些“用户”属性“链接”到在线上,而不是一遍又一遍地重复“$User”


结果是干净的,直接来自《推进手册》…顺便说一句,我也读了很多章节,只是作为初学者/新手有“启动”问题。

如果你的关系设置正确,应该有对象的访问器:

$user->getAgenciesAndUsers()

不应该有理由单独查询AgenciesAndUsers。事实上,如果在查询中使用连接,则只需点击数据库一次


另外,如果您还没有深入了解这一点,我会将所有内容重命名为单数,即
AgencyAndUser
(或者更正确地说
UserAgency
),并且
User
,谢谢,我认为应该这么简单。那么我的“用户”对象应该包含“AgenciesAndUsers”属性吗?我无法重命名所有内容,因为我正在连接一个现有数据库(反向运行w/prope),当需要将所有现有数据导入新应用程序时(在Zend中重做),那么不必过多地干扰数据库应该会很方便……我希望:)前开发人员将所有内容命名为“代理”和“用户”和“用户”,有些桌子有6-8张桌子深的关系,这真让我头疼!现在我明白你为什么要把它重命名为“User”或“AgenciesAndUser”…我刚刚发现我需要访问“agenciesandusers”,注意末尾的额外“s”。可能值得重命名表并重建我的模型。谢谢你帮我找到它。看看你的
元素上的
phpName
属性:你可以保留相同的表名,但定义完全不同的类名。我记得读过这篇文章,实际上,我想我会更仔细地看一下,因为有奇怪的方法名会给我带来一些麻烦,我很高兴能帮上忙。。。
元素上也存在相同的属性,可用于指定类中该列的属性名。。我猜这可能也有用:-)