使用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手册......顺便说一句,我也读了很多章节,只是作为初学者/新手有'启动'问题。
谢谢,我认为应该是那么简单。所以我的'用户'对象应该在那之后包含'AgenciesAndUsers'属性?我无法重新命名所有内容,因为我正在连接到现有数据库(运行反向W/Propel),并且需要将所有现有数据导入新应用程序(在Zend中重做),而不是太多地混淆数据库应该证明是方便的......我希望:)前开发者将所有内容命名为'Agencies_and_Users'和'Users',其中一些表格与6-8张桌子有深层关系,这实在是让我头晕! – rhaag71 2011-03-27 00:42:40
现在我明白你为什么说要将它重命名为'User'或'AgenciesAndUser'...我刚刚发现我需要访问'AgenciesAndUserss'最后注意额外的''。值得重新命名表格并重建我的模型。感谢您帮助我找到。 – rhaag71 2011-03-27 00:55:17
查看'table'元素上的'phpName'属性:http://www.propelorm.org/wiki/Documentation/1.5/Schema可以保留相同的表名,但定义完全不同的类名称。 – prodigitalson 2011-03-27 01:04:58