0

我试图通过从另一个表中检索特定参数来从名为 Faculty 的表中提取一组特定的记录。我从 sfGuard 用户那里获取 ID,然后从 ID 中检索记录。从那里我想从该表中提取部门名称,并仅显示具有该部门名称的教师记录。

这就是我的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']; 到 $userDept = "工程";

更新以下问题:

我正在获取用户 ID,然后询问该 ID 的部门标题。我可以使用 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 内部有带有 Engineering 的字符串。这就是我这样做的原因:

$userDept = "Engineering";

而且我能够获得工程界所有记录的结果。

这就是我发现的有效方法:

根据 ProdigitalSon,我能够查看模型并弄清楚如何从用户表中提取部门标题。这是有效的。

$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();

这是在提取每条记录,而不仅仅是具有部门标题的记录。我可以通过多重连接更轻松地做到这一点吗?

4

2 回答 2

0

突出的第一件事是,当您已经拥有用户时,为什么还要查询用户。您不需要sfGuardUser再次查询您已经从呼叫中获得了该记录myUser::getGuardUser()

那么接下来的事情是你确定你正在使用的记录有一个department_title属性集吗?您确定您没有在架构或代码段中拼错列名吗?我们确定您正在使用的值sfGuardUser::department_title实际上与 中的某些记录匹配Faculty::notables吗?

于 2012-06-15T17:10:41.023 回答
0

这就是我解决从 MyUserProfile 类获取部门标题问题的方法

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

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

    $userDept = $getProfile['department_title'];
    $this->facultyAdminFind = Doctrine_Query::create()
            ->from ("Faculty a")
            ->where("a.notables LIKE ?", "%$userDept%")
            ->execute();
于 2012-06-19T15:36:30.180 回答