2013-12-10 32 views
0

我在模型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

卸下型號名稱的工作原理:

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

但是,如果有一個以上的模型正在與這些字段名稱的一個引用,將炸燬。我在此將其作爲答案,因爲它目前在技術上適用於我的情況,但我想要一個更好的答案,或者討論如果此答案是使其當前正常工作的唯一方法。

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); 
} 
+0

我會給這個鏡頭,讓你知道它是如何結果。看起來很明顯,現在看到它。 –

+0

我發現我需要調用'''parent :: __構造($ id,$ table,$ ds);'''在將''this-> virtualFields''設置爲父構造函數之前設置值''this-> alias''' ... –