使用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,只是作为初学者/新手有'启动'问题。
答案 0 :(得分:1)
如果您的关系设置正确,则应该有对象的访问者:
$user->getAgenciesAndUsers();
没有理由分别查询AgenciesAndUsers。实际上,如果在查询中使用JOIN,则只需要按一次DB。
此外,如果你没有走到这一步,我会重命名它是奇异的,即。 AgencyAndUser
(或更正确的UserAgency
)和User
。