2012-05-01 44 views
0

我發現CRUD和hasOne()中存在一個問題,其中$ display_field在「添加」表單中被忽略。如果引用的模型具有「名稱」字段,則CRUD的添加表單中的下拉菜單將正確填充。但是,如果hasOne()模型使用$ display_field參數,我希望添加表單顯示指定的字段,但它不。它只會顯示引用模型的'name'字段或'id',而不是$ display指定的字段。但是,添加條目後,將使用正確的$ display_field來顯示條目。所以這個問題在Add操作的某個地方。

例如:

作者

class Model_Author extends Model_Table { 

public $table='author'; 

function init(){ 
    parent::init(); 
    $this->addField('long_name'); 
    $this->addField('DOB'); 

    } 
} 

class Model_Book extends Model_Table { 

public $table='book'; 

function init(){ 
    parent::init(); 

$this->addField('title'); 
$this->hasOne('Author', 'author_id', 'long_name'); 
} 

}

CRUD頁面。

class page_manager extends Page { 

function init() { 
parent::init(); 

$tabs=$this->add('Tabs'); 

$crud=$tabs->addTab('Book')->add('CRUD'); 
    } 
} 

當您選擇添加按鈕時,作者字段將在作者表中顯示作者的ID號。但是,添加Book條目後,將使用正確的字段(即long_name)來顯示現有條目。

乾杯

+0

這看起來像一個錯誤。請在這裏報告:https://github.com/atk4/atk4/issues – romaninsh

+0

好吧,我已經將問題添加到git hub。乾杯。 – LostInTheWeb

+0

Model_Author中是否缺少'$ title_field'這個問題? –

回答

0

我確實遇到了相同的行爲,並同意期待hasOne(第三個參數),這是顯示領域應覆蓋模型$ title_field。

我隔離了原因並找到了改進的方法。打開文件atk4/lib中/場/ Reference.php和功能getModel()行添加到這樣設置顯示字段:

function getModel(){ 
     if(!$this->model)$this->model=$this->add($this->model_name); 
     if($this->display_field) $this->model->title_field=$this->display_field; 
     return $this->model; 
    } 

這是工作,你所期望的,這是hasOne ()將決定在CRUD的ADD表單中顯示哪個字段。不過,我不能監督任何副作用或其他地方添加此display_field。