我在模型Person
中有一个非常基本的虚拟字段:
public $virtualFields = array(
"name" => "CONCAT(Person.first_name, ' ', Person.last_name)"
);
在另一个模型Cars
中,我使用别名三引用People
:
public $belongsTo = array(
"Creator" => array(
"className" => "Person",
"foreignKey" => "created_by"
),
"Modifier" => array(
"className" => "Person",
"foreignKey" => "modified_by"
),
"Person"
);
在Person
关系中只有$belongsTo
,它可以正常工作。但是,使用别名,虚拟字段正在爆炸:
Unknown column 'Person.name' in 'where clause'
我尝试使用$name
作为建议here的模型名称。这给了我一个php语法错误。
必须有办法克服这个问题,看起来很简单。我错过了什么?
由于
答案 0 :(得分:3)
另一种可能性是在其他地方声明模型的$ virtualFields属性,因此您可以对其进行一些操作。例如,在模型的构造函数中:
public function __construct($id = false, $table = null, $ds = null) {
$this->virtualFields = array('name' => 'CONCAT(' . $this->alias . '.first_name, " ", ' . $this->alias . '.last_name)' );
parent::__construct($id, $table, $ds);
}
答案 1 :(得分:0)
删除模型名称有效:
public $virtualFields = array(
"name" => "CONCAT(first_name, ' ', last_name)"
);
但是,如果使用其中一个字段名称引用了多个模型,那将会爆炸。我在这里作为答案,因为它在技术上对我目前的情况有效,但我想要一个更好的答案,或讨论如果这个答案是使它目前工作的唯一方法。