我试图从名为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的记录。我可以通过多次加入更轻松地完成这项工作吗?
答案 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();