use*_*368 6 php cakephp cakephp-1.3
我有一个名为模型User具有虚拟现场叫full_name.当我User在find()查询中访问我的模型时,我可以在我的虚拟字段上设置条件,没有这样的问题:
$user = $this->User->find('first', array(
'recursive' => -1,
'conditions' => array(
'User.full_name' => 'Bruce Thomas'
)
));
Run Code Online (Sandbox Code Playgroud)
上面的查询将成功返回名为Bruce Thomas的用户的数据.但是当我尝试通过另一个模型使用我的模型用户时,问题就出现了,如下所示的Containable行为:
$user = $this->MyOtherModel->find('first', array(
'contain' => array('User'),
'conditions' => array(
'MyOtherModel.id' => $my_other_model_id
'User.full_name' => 'Bruce Thomas'
)
));
Run Code Online (Sandbox Code Playgroud)
(上面的例子假设与我的模型MyOtherModel有belongsTo关系MyOtherModel)
上面的查询给出了以下错误:
警告(512):SQL错误:1054:'on子句'中的未知列'User.full_name'[CORE\cake\libs\model\datasources\dbo_source.php,第681行]
有关我如何能做到这一点的任何帮助吗?谢谢
Thi*_*zzi 10
根据最新的CakePHP文档(针对v2及更高版本),这是虚拟字段的限制 - 这就是它所说的:
virtualFields的实现有一些限制.首先,您不能在关联模型上对条件,顺序或字段数组使用virtualField.这样做通常会导致SQL错误,因为字段不会被ORM替换.这是因为很难估计可能找到相关模型的深度.此实现问题的常见解决方法是在需要访问虚拟目标时,在运行时将虚拟目标从一个模型复制到另一个模型:
$this->virtualFields['name'] = $this->Author->virtualFields['name'];
Run Code Online (Sandbox Code Playgroud)
要么
$this->virtualFields += $this->Author->virtualFields;
Run Code Online (Sandbox Code Playgroud)
更多细节在这里:http://book.cakephp.org/2.0/en/models/virtual-fields.html - 如果你打算实施他们建议的选项(看起来对我很好),你应该看一看在"虚拟字段和模型别名"部分,以避免字段名称冲突(即,如果您有full_name两个模型中调用的字段并尝试发出使用两者的查询,您将得到一个模糊的字段SQL错误;使用别名可以避免).
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |