我有模型ExternalShare
,其中 hasOne SfileVersion
。还有第三个模型Sfile
, hasMany SfileVersion
。
在 SfileVersion 中我在$ virtualFields中有以下代码:
class SfileVersion extends AppModel {
public $virtualFields = array(
'active' => 'SfileVersion.is_active',
'externalShare' => 'ExternalShare.id'
);
[...]
}
AppModel看起来像以下代码,因此, Containable 随处可用:
class AppModel extends Model {
public $recursive = -1;
public $actsAs = array('Containable');
}
现在,我尝试在find('all')
中调用SfileController
方法,以便从Sfile
和SfileVersion
获取数据:
class SfilesController extends AppController {
public function index() {
$this->Sfile->recursive = 0;
$this->Sfile->contain('SfileVersion');
$allSfiles = $this->Sfile->find('all');
}
[...]
}
现在我得到了以下错误:
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ExternalShare.id' in 'field list'
在CookBook(http://book.cakephp.org/2.0/en/models/virtual-fields.html#limitations-of-virtualfields)中,这是
此实施问题的常见解决方法是复制 在需要时,virtualFields在运行时从一个模型到另一个模型 访问他们
,我尝试过,在find('all')
前面添加以下几行:
$this->Sfile->virtualFields['externalShare'] = $this->Sfile->SfileVersion->virtualFields['externalShare'];
但我仍然遇到同样的错误。我没有直接了解,解决方法正在做什么。此外,我的虚拟字段可能不是问题(活动似乎工作),只是特殊的,指向其他(第三)模型关联(ExternalShare.id
)。有人有想法或解决方案吗?非常感谢你!