虚拟字段具有动态模型名称

时间:2013-12-10 22:00:23

标签: cakephp model relational-database

我在模型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语法错误。

必须有办法克服这个问题,看起来很简单。我错过了什么?

由于

2 个答案:

答案 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)"
);

但是,如果使用其中一个字段名称引用了多个模型,那将会爆炸。我在这里作为答案,因为它在技术上对我目前的情况有效,但我想要一个更好的答案,或讨论如果这个答案是使它目前工作的唯一方法。