多个对象的CakePHP virtualField和displayField

多个对象的CakePHP virtualField和displayField,php,cakephp,model,Php,Cakephp,Model,我对displayField与virtualFields的结合有点问题 我有一个属于两个不同用户的文件 作为用户模型中的virtualField和displayField。我使用以下代码: public $virtualFields = array( 'full_name' => "CONCAT(first_name, ' ',last_name)" ); public $displayField = 'full_name'; 创建新文件可以正常工作,但如果我想查看所有文件,则会出

我对displayField与virtualFields的结合有点问题

我有一个属于两个不同用户的文件

作为用户模型中的virtualField和displayField。我使用以下代码:

public $virtualFields = array(
  'full_name' => "CONCAT(first_name, ' ',last_name)"
);

public $displayField = 'full_name';
创建新文件可以正常工作,但如果我想查看所有文件,则会出现以下错误:

错误:SQLSTATE[23000]:完整性约束冲突:字段列表中的1052列“first_name”不明确

我已经在这里读到了一点: 最后,virtualFields有一些限制,因此我尝试将其添加到控制器中:

$this->virtualFields += $this->Creator->virtualFields;
$this->virtualFields += $this->Editor->virtualFields;
但不知何故,这并没有改变任何事情

希望你能帮我解决这个小问题


提前谢谢

我想您需要两个虚拟字段:

$this->File->virtualFields = array(
    'Creator__full_name' => "CONCAT(Creator.first_name, ' ',Creator.last_name)",
    'Editor__full_name' => "CONCAT(Editor.first_name, ' ',Editor.last_name)"
);

您是否尝试将模型名称添加到字段名称中,例如,“full_name”=>“CONCATUser.first_name,,User.last_name”?是的,但我收到一个错误,说找不到User.first_name,因为他正在查找Creator.first_name。是的,您需要使用从中获取first_name和last_name的正确模型名称。请阅读上的部分。他们的代码应该非常适合您。Not found=>您忘记加入关系..也尝试了这个。不幸的是,它不起作用。这段代码对我有用:感谢AgRizzo提供的链接:公共函数uu构造$id=false,$table=null,$ds=null{parent::uuu构造$id,$table,$ds;$This->virtualFields['name']=sprintf'CONCAT%s.first\u name,,%s.last\u name',$This->alias,$This->This->alias;}
$this->File->virtualFields = array(
    'Creator__full_name' => "CONCAT(Creator.first_name, ' ',Creator.last_name)",
    'Editor__full_name' => "CONCAT(Editor.first_name, ' ',Editor.last_name)"
);