多个Doctrine查询使用sfGuard插件提取特定记录

时间:2012-06-15 17:00:27

标签: symfony1 doctrine symfony-1.4

我试图从名为Faculty的表中提取一组特定记录,方法是从另一个表中检索特定参数。我从sfGuard用户那里获取了id,然后从ID中检索记录。从那里我想从该表中提取部门标题,并仅显示具有该部门标题的Faculty的记录。

这就是我在actions.class中所拥有的:

$userId = $this->getUser()->getGuardUser()->getId();
$userRecord = Doctrine_Query::create()
        ->from ('sfGuardUser s')
        ->where("s.id = '$userId'")
        ->limit('1')
        ->execute();
$userDept = $userRecord['department_title'];        
$this->facultyAdminFind = Doctrine_Query::create()
        ->from ("Faculty a")
        ->where("a.notables LIKE ?", "%$userDept%")
        ->execute();

在做了一些故障排除之后,我知道我从sfGuardUser表中提取了正确的ID和正确的记录。我似乎无法从sfGuardUser记录中拉出部门标题。 循环没有任何结果。

如果我更改$ userDept = $ userRecord ['department_title']; to $ userDept =“Engineering”;

更新以下问题:

我收到了userID,然后询问该ID的department_title。我可以使用getGuardUser()获取id,但不能使用'department_title'吗?如果是这样,那语法会是什么样的?

我确信有部门名称,没有拼写错误。我实际上是从这个backwrds工作来验证所有被拉的变量

首先我这样做了:

$this->facultyAdminFind = Doctrine_Query::create()
        ->from ('sfGuardUser s')
        ->where("s.id = '$userId'")
        ->limit('1')
        ->execute();

在循环中返回了正确的记录,我能够在模板中使用$ item ['department_title“]来正确调用部门标题。所以我知道我得到正确的用户ID并将正确的记录调到$ userRecord。

此外,在Faculty :: notables中,有一些与工程师的字符串。这就是我这样做的原因:

$userDept = "Engineering";

我能够在名人中获得有关工程的所有记录的结果。

这是我发现有效的方法:

Per ProdigitalSon我能够查看模型并找出如何从用户表中提取dept标题。这很有效。

$userId = $this->getUser()->getGuardUser()->getDepartmentTitle();
    $this->facultyAdminFind = Doctrine_Query::create()
            ->from ("Faculty a")
            ->where("a.notables LIKE ?", "%$userId%")
            ->execute();

更新

我了解到你不应该修改sfGuard架构,因为如果你更新插件,你将失去专门的架构。我在主模式中添加了一个新类,并在sf_guard_user和department_title之间建立了一个工作关联。

问题是我试图从数组中获取department_title而回到原点。 这是添加的架构:

MyUserProfile:
  columns:
    id: { type: integer, primary: true, autoincrement: true }
    sf_guard_user_id: { type:integer }
    department_title: { type: string(255) }
    # ... other column definitions
  relations:
    User:
     class: sfGuardUser
     foreignType: one
     foreignAlias: Profile
     local: sf_guard_user_id
     onDelete: CASCADE

这是应该有效的查询(在我脑海中)。

//pulls department limited records for faculty admin
    $userId = $this->getUser()->getGuardUser()->getId();
    $usergetDept = Doctrine_Query::create()
            ->from('MyUserProfile d')
            ->where("d.sf_guard_user_id = '$userId'")
            ->execute();

    $userDept = $usergetDept['department_title'];
    $this->facultyAdminFind = Doctrine_Query::create()
            ->from ("Faculty a")
            ->where("a.notables LIKE ?", "%$userDept%")
            ->execute();

这会拉动每条记录,而不仅仅是带有department_title的记录。我可以通过多次加入更轻松地完成这项工作吗?

2 个答案:

答案 0 :(得分:0)

第一个突出的事情是,当你已经拥有用户时,为什么要查询用户。您无需再次查询sfGuardUser,即已通过调用myUser::getGuardUser()来获取该记录。

接下来是你确定你正在使用的记录设置了department_title属性吗?您确定在模式或代码段中没有错误地填写列名吗?我们确定您使用的sfGuardUser::department_title中的值确实与Faculty::notables中的某些记录匹配吗?

答案 1 :(得分:0)

这就是我解决从MyUserProfile类获取department_title的问题

将关系添加到架构后,您可以像这样调用记录:

    $getProfile = $this->getUser()->getProfile();

    $userDept = $getProfile['department_title'];
    $this->facultyAdminFind = Doctrine_Query::create()
            ->from ("Faculty a")
            ->where("a.notables LIKE ?", "%$userDept%")
            ->execute();