我是cakephp的新手,我有下一个问题:
型号:费用中心 - >奖学金 - >奖学金详情
1。奖学金模式中的虚拟领域:
public $virtualFields = array(
'code' => "UPPER(CONCAT(SUBSTR(CostsCenter.name, 1, 3), '-',
Scholarship.selection_year, '-', SUBSTR(Country.name, 1, 3), '-',
Postulant.number))");
2。在ScholarshipsDetail
中列出所有控制器$scholarships_detail = $this->ScholarshipsDetail->find('all',
array('contain' => array('Scholarship' => array('CostsCenter')),
'conditions' => array('ScholarshipsDetail.scholarship_id' => $scholarship_id)));
然后,我需要列出ScholarshipsDetail,但我有错误:
Column not found: 1054 Unknown column 'CostsCenter.name' in 'field list'
我试图申请"包含"在CostsCenter的奖学金中,但仍然出现错误
答案 0 :(得分:2)
问题是使用可包含进行查找不会选择ScholarshipDetail JOIN Scholarship JOIN CostCenter。 如果查看SQL调试输出,您将看到首先获得ScholarshipDetail和Scholarship记录,然后循环遍历这些记录并通过在CostCenter表上进行单独选择将CostCenter记录添加到结果数组中。 因此,CostCenter字段无法在虚拟字段中使用,并且查询失败。 This link有助于更好地解释这个可容纳的陷阱。
如果您确实要保留虚拟字段,则不应使用可包含的内容并使用manual joins代替设置查询。
但是,由于您的虚拟字段会引用不同的模型,因此您经常遇到此类问题,因此创建一个真实字段会更好。尝试这样的事情:
updateCode()
,通过从各个表中选择正确的信息来制定代码,然后更新奖学金表中的代码字段。