我有一个状态表,该表用作参考其他表中的状态示例/标记状态示例:
| id | status |
|-------|------------|
| 1 | Active |
| 2 | Disabled |
| 3 | Admin Only |
| 4 | Archived |
我试图在用户实体的ISENABLED()函数中使用这些值。
public function isEnabled() {
$statusObj = $this->status;
$statusValue = $statusObj->getStatus();
if( $statusValue != "Active" ){
return false;
}
// Simply persisting true works
return true;
}
使用此功能是当前正在登录,我会收到一个非对象错误。
错误:在非对象上调用成员函数getStatus()
看debug,$状态似乎是一个代理对象,而不是我的状态对象,但似乎找不到任何东西可以从这里指向正确的方向。
user.orm.ym.ym
AppBundleEntityUser:
type: entity
table: user
indexes:
fk_user_status1_idx:
columns:
- status_id
id:
id:
type: integer
nullable: false
options:
unsigned: false
comment: 'user Primary Key'
id: true
generator:
strategy: IDENTITY
fields:
# ....
manyToOne:
status:
targetEntity: Status
cascade: { }
joinColumns:
status_id:
referencedColumnName: id
orphanRemoval: false
manyToMany:
roles:
targetEntity: Role
joinTable:
name: user_has_role
joinColumns:
user_id:
referencedColumnName: id
inverseJoinColumns:
role_id:
referencedColumnName: id
lifecycleCallbacks: { }
我尝试更改user.orm.ym.yl文件中的 fetch:
以具有懒惰和渴望的值,都不更改任何内容。
我试图使这篇文章简洁,所以如果我错过了任何重要的细节,请告诉我。
***更新***
我没有基于多到一的单向相对启动设置映射/反移选项。现在,我删除了" null"生成的值,因此状态与已链接的文档匹配。状态表和实体以任何方式不包括对用户的引用。
在我的IDE中运行调试时,我发现IseNabled()被调用两次... IneNabled()的第一个调用看起来很完美。$ statsobj is ==代理对象,当我调用$ statemobj-> getStatus()时,我会看到它按预期返回" active"。然后,函数返回true,第二次调试器跳回IneNabled()。我的用户对象的第二次运行是null。经过几个小时的架气,我的大脑试图找出为什么IseNabled()运行两次...最终,我最终会出现第一次运行,而第二次运行是在身份验证通过后重定向期间进行的。事实证明,整个问题是,$ this->状态永远不会添加到序列化/毫无疑问的函数中,因此状态属性在UnseralSeals中无效,当呼叫InEnabled验证时,该状态属性失败了。
。解决方案与所描述的问题相去甚远,除非有人有任何建议使他人对他人有用的建议,否则我会投票删除。
学说由于懒惰的加载机制而将您的关系包裹在代理中。直接访问$this->status
时,您会得到该代理对象。
尝试使用getter:
public function isEnabled() {
if( $this->getStatus()->getStatus() != "Active" ){
return false;
}
...
}
看起来有点有趣,但是$this->getStatus()
为您提供了状态实体,而额外的getStatus()
要求状态实体的字段"状态"。
您尚未发布状态实体代码,但是您可能需要这样更改:
manyToOne:
status:
targetEntity: Status
cascade: { }
orphanRemoval: false
inversedBy: value_in_Status
joinColumn:
name: status_id
referencedColumnName: id
请注意,您有" joincolumns"不是" joincolumn"。