【发布时间】:2011-03-27 00:18:24
【问题描述】:
在使用 Zend 框架进行项目时,我将 Propel ORM 与许多相关的数据库对象一起使用。我对这两者都是新手,但是我创建了对象模型并且可以正常工作。我现在只是想了解对象访问。
我有一个创建新用户的方法,它工作良好并更新相关行(不是每个相关的,但它是一个开始)。现在我想向系统用户(用户创建者)展示“新”用户数据。我找回了用户名,现在我想在其他一些属性中获取“UserLevel”。
创建用户后,我调用我的 findUserByUserName 方法,传递新用户的用户名,我在用户表中返回所有内容,但我还需要与该新用户相关的“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();
编辑:我刚刚意识到(在查看了我发布的问题之后),我可能可以将所有这些“用户”属性“链接”到在线而不是一遍又一遍地重复“$用户”。
结果很干净,直接来自 Propel 手册...顺便说一句,我也阅读了很多部分,只是作为初学者/新手遇到了“启动”问题。
【问题讨论】:
标签: php oop zend-framework orm propel