2011-03-27 123 views
0

使用Zend Framework处理项目时,我将Propel ORM与许多相关的数据库对象一起使用。我对两者都是新手,但我已经创建并运行了对象模型。我只是试图让我的头现在对象访问。我有一个方法来创建一个新的用户,其工作良好并更新相关的行(不是每个相关的,但它是一个开始)。现在我想向系统用户(用户创建者)展示'新'用户数据。我收到了用户名,现在我想在其他一些属性中获得“UserLevel”。如何获取相关对象Propel ORM

在创建用户之后,我调用了我的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(); 

编辑:我只是意识到(看我贴出的问题后),我大概可以“链”所有这些'用户'属性在线,而不是一遍又一遍地重复'$用户'。

原来是干净的,直接从Propel手册......顺便说一句,我也读了很多章节,只是作为初学者/新手有'启动'问题。

回答

1

如果你有你的关系,正确设置应该有对象存取:

$user->getAgenciesAndUsers();

有不应该是一个原因分别查询AgenciesAndUsers。事实上,如果您在查询中使用JOIN,则只需要敲击一次数据库。

此外,如果你没有走到这远,我将重新命名为单数即是。 AgencyAndUser(或更正确地说UserAgency)和User

+0

谢谢,我认为应该是那么简单。所以我的'用户'对象应该在那之后包含'AgenciesAndUsers'属性?我无法重新命名所有内容,因为我正在连接到现有数据库(运行反向W/Propel),并且需要将所有现有数据导入新应用程序(在Zend中重做),而不是太多地混淆数据库应该证明是方便的......我希望:)前开发者将所有内容命名为'Agencies_and_Users'和'Users',其中一些表格与6-8张桌子有深层关系,这实在是让我头晕! – rhaag71 2011-03-27 00:42:40

+0

现在我明白你为什么说要将它重命名为'User'或'AgenciesAndUser'...我刚刚发现我需要访问'AgenciesAndUserss'最后注意额外的''。值得重新命名表格并重建我的模型。感谢您帮助我找到。 – rhaag71 2011-03-27 00:55:17

+0

查看'table'元素上的'phpName'属性:http://www.propelorm.org/wiki/Documentation/1.5/Schema可以保留相同的表名,但定义完全不同的类名称。 – prodigitalson 2011-03-27 01:04:58